
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.
29 lines
1.9 KiB
C
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
|