Skip to content

Commit 668f2c7

Browse files
authored
[clang][UBSan] Make sure that the implicit-conversion group is compatible with minimal runtime (#114865)
We are currently getting: `clang: error: invalid argument '-fsanitize-minimal-runtime' not allowed with '-fsanitize=implicit-conversion'` when running `-fsanitize=implicit-conversion -fsanitize-minimal-runtime` because `implicit-conversion` now includes `implicit-bitfield-conversion` which is not included in the `integer` check. The `integer` check includes the `implicit-integer-conversion` checks and is supported by the trapping option and because of that compatible with the minimal runtime. It is thus reasonable to make `implicit-bitfield-conversion` compatible with the minimal runtime.
1 parent 1466711 commit 668f2c7

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

clang/lib/Driver/SanitizerArgs.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@ static const SanitizerMask AlwaysRecoverable = SanitizerKind::KernelAddress |
6565
static const SanitizerMask NeedsLTO = SanitizerKind::CFI;
6666
static const SanitizerMask TrappingSupported =
6767
(SanitizerKind::Undefined & ~SanitizerKind::Vptr) | SanitizerKind::Integer |
68-
SanitizerKind::Nullability | SanitizerKind::LocalBounds |
69-
SanitizerKind::CFI | SanitizerKind::FloatDivideByZero |
70-
SanitizerKind::ObjCCast;
68+
SanitizerKind::ImplicitConversion | SanitizerKind::Nullability |
69+
SanitizerKind::LocalBounds | SanitizerKind::CFI |
70+
SanitizerKind::FloatDivideByZero | SanitizerKind::ObjCCast;
7171
static const SanitizerMask TrappingDefault = SanitizerKind::CFI;
7272
static const SanitizerMask CFIClasses =
7373
SanitizerKind::CFIVCall | SanitizerKind::CFINVCall |

clang/test/Driver/fsanitize.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -866,6 +866,13 @@
866866
// CHECK-INTSAN-MINIMAL: "-fsanitize=integer-divide-by-zero,shift-base,shift-exponent,signed-integer-overflow,unsigned-integer-overflow,unsigned-shift-base,implicit-unsigned-integer-truncation,implicit-signed-integer-truncation,implicit-integer-sign-change"
867867
// CHECK-INTSAN-MINIMAL: "-fsanitize-minimal-runtime"
868868

869+
// RUN: %clang --target=x86_64-linux-gnu -fsanitize=implicit-conversion -fsanitize-trap=implicit-conversion %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-IMPL-CONV-TRAP
870+
// CHECK-IMPL-CONV-TRAP: "-fsanitize-trap=implicit-unsigned-integer-truncation,implicit-signed-integer-truncation,implicit-integer-sign-change,implicit-bitfield-conversion"
871+
872+
// RUN: %clang --target=x86_64-linux-gnu -fsanitize=implicit-conversion -fsanitize-minimal-runtime %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-IMPL-CONV-MINIMAL
873+
// CHECK-IMPL-CONV-MINIMAL: "-fsanitize=implicit-unsigned-integer-truncation,implicit-signed-integer-truncation,implicit-integer-sign-change,implicit-bitfield-conversion"
874+
// CHECK-IMPL-CONV-MINIMAL: "-fsanitize-minimal-runtime"
875+
869876
// RUN: %clang --target=aarch64-linux-android -march=armv8-a+memtag -fsanitize=memtag -fsanitize-minimal-runtime %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-MEMTAG-MINIMAL
870877
// CHECK-MEMTAG-MINIMAL: "-fsanitize=memtag-stack,memtag-heap,memtag-globals"
871878
// CHECK-MEMTAG-MINIMAL: "-fsanitize-minimal-runtime"

0 commit comments

Comments
 (0)