Author: samsonov
Date: Wed May 20 20:07:52 2015
New Revision: 237870
URL: http://llvm.org/viewvc/llvm-project?rev=237870&view=rev
Log:
[Driver] Improve unused-argument diagnostic for extra sanitizer features.
Don't print unused-argument warning for sanitizer-specific feature flag
if this sanitizer was eanbled, and later disabled in the command line.
For example, now:
clang -fsanitize=address -fsanitize-coverage=bb -fno-sanitize=address a.cc
doesn't print warning, but
clang -fsanitize-coverage=bb
does. Same holds for -fsanitize-address-field-padding= and
-fsanitize-memory-track-origins= flags.
Fixes PR23604.
Modified:
cfe/trunk/lib/Driver/SanitizerArgs.cpp
cfe/trunk/test/Driver/fsanitize-coverage.c
cfe/trunk/test/Driver/fsanitize.c
Modified: cfe/trunk/lib/Driver/SanitizerArgs.cpp
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/SanitizerArgs.cpp?rev=237870&r1=237869&r2=237870&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/SanitizerArgs.cpp (original)
+++ cfe/trunk/lib/Driver/SanitizerArgs.cpp Wed May 20 20:07:52 2015
@@ -154,6 +154,11 @@ SanitizerArgs::SanitizerArgs(const ToolC
SanitizerMask AllRemove = 0; // During the loop below, the accumulated set
of
// sanitizers disabled by the current sanitizer
// argument or any argument after it.
+ SanitizerMask AllAddedKinds = 0; // Mask of all sanitizers ever enabled by
+ // -fsanitize= flags (directly or via group
+ // expansion), some of which may be
disabled
+ // later. Used to carefully prune
+ // unused-argument diagnostics.
SanitizerMask DiagnosedKinds = 0; // All Kinds we have diagnosed up to now.
// Used to deduplicate diagnostics.
SanitizerMask Kinds = 0;
@@ -167,6 +172,7 @@ SanitizerArgs::SanitizerArgs(const ToolC
if (Arg->getOption().matches(options::OPT_fsanitize_EQ)) {
Arg->claim();
SanitizerMask Add = parseArgValues(D, Arg, true);
+ AllAddedKinds |= expandSanitizerGroups(Add);
// Avoid diagnosing any sanitizer which is disabled later.
Add &= ~AllRemove;
@@ -330,7 +336,7 @@ SanitizerArgs::SanitizerArgs(const ToolC
}
// Parse -f[no-]sanitize-memory-track-origins[=level] options.
- if (Kinds & Memory) {
+ if (AllAddedKinds & Memory) {
if (Arg *A =
Args.getLastArg(options::OPT_fsanitize_memory_track_origins_EQ,
options::OPT_fsanitize_memory_track_origins,
@@ -352,7 +358,7 @@ SanitizerArgs::SanitizerArgs(const ToolC
// Parse -f(no-)?sanitize-coverage flags if coverage is supported by the
// enabled sanitizers.
- if (Kinds & SupportsCoverage) {
+ if (AllAddedKinds & SupportsCoverage) {
for (const auto *Arg : Args) {
if (Arg->getOption().matches(options::OPT_fsanitize_coverage)) {
Arg->claim();
@@ -415,7 +421,7 @@ SanitizerArgs::SanitizerArgs(const ToolC
<< "-fsanitize-coverage=8bit-counters"
<< "-fsanitize-coverage=(func|bb|edge)";
- if (Kinds & Address) {
+ if (AllAddedKinds & Address) {
AsanSharedRuntime =
Args.hasArg(options::OPT_shared_libasan) ||
(TC.getTriple().getEnvironment() == llvm::Triple::Android);
Modified: cfe/trunk/test/Driver/fsanitize-coverage.c
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/fsanitize-coverage.c?rev=237870&r1=237869&r2=237870&view=diff
==============================================================================
--- cfe/trunk/test/Driver/fsanitize-coverage.c (original)
+++ cfe/trunk/test/Driver/fsanitize-coverage.c Wed May 20 20:07:52 2015
@@ -28,6 +28,9 @@
// RUN: %clang -target x86_64-linux-gnu
-fsanitize-coverage=1 %s -### 2>&1 | FileCheck %s
--check-prefix=CHECK-SANITIZE-COVERAGE-UNUSED
// CHECK-SANITIZE-COVERAGE-UNUSED: argument unused during compilation:
'-fsanitize-coverage=1'
+// RUN: %clang -target x86_64-linux-gnu -fsanitize=address
-fsanitize-coverage=1 -fno-sanitize=address %s -### 2>&1 | FileCheck %s
--check-prefix=CHECK-SANITIZE-COVERAGE-SAN-DISABLED
+// CHECK-SANITIZE-COVERAGE-SAN-DISABLED-NOT: argument unused
+
// RUN: %clang -target x86_64-linux-gnu -fsanitize=address
-fsanitize-coverage=edge,indirect-calls,trace-bb,trace-cmp,8bit-counters %s
-### 2>&1 | FileCheck %s --check-prefix=CHECK-SANITIZE-COVERAGE-FEATURES
// CHECK-SANITIZE-COVERAGE-FEATURES: -fsanitize-coverage-type=3
// CHECK-SANITIZE-COVERAGE-FEATURES: -fsanitize-coverage-indirect-calls
Modified: cfe/trunk/test/Driver/fsanitize.c
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/fsanitize.c?rev=237870&r1=237869&r2=237870&view=diff
==============================================================================
--- cfe/trunk/test/Driver/fsanitize.c (original)
+++ cfe/trunk/test/Driver/fsanitize.c Wed May 20 20:07:52 2015
@@ -60,6 +60,9 @@
// RUN: %clang -target x86_64-linux-gnu -fsanitize-memory-track-origins -pie
%s -### 2>&1 | FileCheck %s --check-prefix=CHECK-ONLY-TRACK-ORIGINS
// CHECK-ONLY-TRACK-ORIGINS: warning: argument unused during compilation:
'-fsanitize-memory-track-origins'
+// RUN: %clang -target x86_64-linux-gnu -fsanitize=memory -fno-sanitize=memory
-fsanitize-memory-track-origins -pie %s -### 2>&1 | FileCheck %s
--check-prefix=CHECK-TRACK-ORIGINS-DISABLED-MSAN
+// CHECK-TRACK-ORIGINS-DISABLED-MSAN-NOT: warning: argument unused
+
// RUN: %clang -target x86_64-linux-gnu -fsanitize=address %s -### 2>&1 |
FileCheck %s --check-prefix=CHECK-NO-EXTRA-TRACK-ORIGINS
// CHECK-NO-EXTRA-TRACK-ORIGINS-NOT: "-fsanitize-memory-track-origins"
@@ -103,6 +106,9 @@
// CHECK-ASAN-FIELD-PADDING-3: error: invalid value '3' in
'-fsanitize-address-field-padding=3'
// RUN: %clang -target x86_64-linux-gnu -fsanitize-address-field-padding=2 %s
-### 2>&1 | FileCheck %s --check-prefix=CHECK-ASAN-FIELD-PADDING-NO-ASAN
// CHECK-ASAN-FIELD-PADDING-NO-ASAN: warning: argument unused during
compilation: '-fsanitize-address-field-padding=2'
+// RUN: %clang -target x86_64-linux-gnu -fsanitize-address-field-padding=2
-fsanitize=address -fno-sanitize=address %s -### 2>&1 | FileCheck %s
--check-prefix=CHECK-ASAN-FIELD-PADDING-DISABLED-ASAN
+// CHECK-ASAN-FIELD-PADDING-DISABLED-ASAN-NOT: warning: argument unused
+
// RUN: %clang -target x86_64-linux-gnu -fsanitize=vptr -fno-sanitize=vptr
-fsanitize=undefined,address %s -### 2>&1
// OK
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits