llvm-project/clang/test/Driver/fsanitize-signed-integer-overflow.c
Fangrui Song 5f38436d34
[Driver] -fsanitize=undefined: don't expand to signed-integer-overflow if -fwrapv (#85501)
Linux kernel uses -fwrapv to change signed integer overflows from
undefined behaviors to defined behaviors. However, the security folks
still want -fsanitize=signed-integer-overflow diagnostics. Their
intention can be expressed with -fwrapv
-fsanitize=signed-integer-overflow (#80089). This mode by default
reports recoverable errors while still making signed integer overflows
defined (most UBSan checks are recoverable by default: you get errors in
stderr, but the program is not halted).

-fsanitize=undefined -fwrapv users likely want to suppress
signed-integer-overflow, unless signed-integer-overflow is explicitly
enabled. Implement this suppression.
2024-03-19 10:37:51 -07:00

29 lines
1.9 KiB
C

/// When -fwrapv (implied by -fno-strict-overflow) is enabled,
/// -fsanitize=undefined does not expand to signed-integer-overflow.
/// -fsanitize=signed-integer-overflow is unaffected by -fwrapv.
// RUN: %clang -### --target=x86_64-linux -fwrapv -fsanitize=signed-integer-overflow %s 2>&1 | FileCheck %s
// CHECK: -fsanitize=signed-integer-overflow
// CHECK: -fsanitize-recover=signed-integer-overflow
// RUN: %clang -### --target=x86_64-linux -fno-strict-overflow -fsanitize=undefined %s 2>&1 | FileCheck %s --check-prefix=EXCLUDE
// RUN: %clang -### --target=x86_64-linux -fstrict-overflow -fwrapv -fsanitize=undefined %s 2>&1 | FileCheck %s --check-prefix=EXCLUDE
// EXCLUDE: -fsanitize=alignment,array-bounds,
// EXCLUDE-NOT: signed-integer-overflow,
// EXCLUDE: -fsanitize-recover=alignment,array-bounds,
// EXCLUDE-SAME: signed-integer-overflow
// RUN: %clang -### --target=x86_64-linux -fwrapv -fsanitize=undefined -fsanitize=signed-integer-overflow %s 2>&1 | FileCheck %s --check-prefix=INCLUDE
// RUN: %clang -### --target=x86_64-linux -fno-strict-overflow -fno-sanitize=signed-integer-overflow -fsanitize=undefined -fsanitize=signed-integer-overflow %s 2>&1 | FileCheck %s --check-prefix=INCLUDE
// INCLUDE: -fsanitize=alignment,array-bounds,
// INCLUDE-SAME: signed-integer-overflow
// INCLUDE: -fsanitize-recover=alignment,array-bounds,
// INCLUDE-SAME: signed-integer-overflow
/// -fsanitize-trap=undefined expands to signed-integer-overflow regardless of -fwrapv.
// RUN: %clang -### --target=x86_64-linux -fwrapv -fsanitize=undefined -fsanitize=signed-integer-overflow -fsanitize-trap=undefined %s 2>&1 | FileCheck %s --check-prefix=INCLUDE-TRAP
// INCLUDE-TRAP: -fsanitize=alignment,array-bounds,
// INCLUDE-TRAP-SAME: signed-integer-overflow
// INCLUDE-TRAP: -fsanitize-trap=alignment,array-bounds,
// INCLUDE-TRAP-SAME: signed-integer-overflow