1 /* { dg-do compile } */
2 /* { dg-options "-fsanitize=undefined -fno-sanitize-recover=integer-divide-by-zero -fno-sanitize-recover=shift -fdump-tree-optimized" } */
3 /* { dg-skip-if "" { *-*-* } { "-flto -fno-fat-lto-objects" } } */
4 /* { dg-final { scan-tree-dump-times "__ubsan_handle_divrem_overflow_abort" 1 "optimized" } } */
5 /* { dg-final { scan-tree-dump-times "__ubsan_handle_shift_out_of_bounds_abort" 1 "optimized" } } */
6 /* { dg-final { scan-tree-dump-times "__ubsan_handle_type_mismatch_v1" 1 "optimized" } } */
7 /* { dg-final { scan-tree-dump-not "__ubsan_handle_type_mismatch_v1_abort" "optimized" } } */
8 
9 int
foo(int x,int y)10 foo (int x, int y)
11 {
12   return x / y;
13 }
14 
15 int
bar(int x,int y)16 bar (int x, int y)
17 {
18   return x << y;
19 }
20 
21 enum E { E0, E1, E2, E3 };
22 
23 enum E
baz(enum E * x)24 baz (enum E *x)
25 {
26   return *x;
27 }
28