/* Test -f*sanitize*=all */ /* { dg-do run } */ /* { dg-skip-if "" { *-*-* } { "*" } { "-O2" } } */ /* { dg-skip-if "" { *-*-* } { "-flto -fno-fat-lto-objects" } } */ /* { dg-options "-fsanitize=undefined -fsanitize-recover=all -fdump-tree-optimized" } */ int a[4]; int f1 (int x, int y, int z) { return a[x] + (1 << y) + (100 / z); } char * f2 (int x) { char *p = (char *) __builtin_calloc (64, 1); p[x] = 3; return p; } int f3 (int x, int *y, double z, double w) { int a[*y]; if (x) __builtin_unreachable (); asm volatile ("" : : "r" (&a[0])); return z / w; } int main () { return 0; } /* { dg-final { scan-tree-dump "__ubsan_" "optimized" } } */ /* { dg-final { scan-tree-dump-not "__ubsan_\[a-z_\]*_abort" "optimized" } } */ /* { dg-final { scan-tree-dump "UBSAN_CHECK_" "optimized" } } */