[clang-tidy] Fix the order of ExtraArgsBefore

Added tests for the relative order of -extra-arg(-before) and ExtraArgs(Before).

llvm-svn: 279516
This commit is contained in:
Alexander Kornienko 2016-08-23 14:13:31 +00:00
parent a4092104cb
commit 42fd75ea86
3 changed files with 30 additions and 4 deletions

View File

@ -426,10 +426,14 @@ runClangTidy(std::unique_ptr<ClangTidyOptionsProvider> OptionsProvider,
ArgumentsAdjuster PerFileExtraArgumentsInserter =
[&Context](const CommandLineArguments &Args, StringRef Filename) {
ClangTidyOptions Opts = Context.getOptionsForFile(Filename);
CommandLineArguments AdjustedArgs;
if (Opts.ExtraArgsBefore)
AdjustedArgs = *Opts.ExtraArgsBefore;
AdjustedArgs.insert(AdjustedArgs.begin(), Args.begin(), Args.end());
CommandLineArguments AdjustedArgs = Args;
if (Opts.ExtraArgsBefore) {
auto I = AdjustedArgs.begin();
if (I != AdjustedArgs.end() && !StringRef(*I).startswith("-"))
++I; // Skip compiler binary name, if it is there.
AdjustedArgs.insert(I, Opts.ExtraArgsBefore->begin(),
Opts.ExtraArgsBefore->end());
}
if (Opts.ExtraArgs)
AdjustedArgs.insert(AdjustedArgs.end(), Opts.ExtraArgs->begin(),
Opts.ExtraArgs->end());

View File

@ -1,7 +1,22 @@
// RUN: clang-tidy -checks='-*,modernize-use-override,clang-diagnostic-shadow,clang-diagnostic-float-conversion' %s -- | count 0
//
// Enable warnings using -config:
// RUN: clang-tidy -checks='-*,modernize-use-override,clang-diagnostic-shadow,clang-diagnostic-float-conversion' \
// RUN: -config='{ExtraArgs: ["-Wshadow","-Wno-unused-variable"], ExtraArgsBefore: ["-Wno-shadow","-Wfloat-conversion","-Wunused-variable"]}' %s -- \
// RUN: | FileCheck -implicit-check-not='{{warning:|error:}}' %s
//
// ... -extra-arg:
// RUN: clang-tidy -checks='-*,modernize-use-override,clang-diagnostic-shadow,clang-diagnostic-float-conversion' \
// RUN: -extra-arg=-Wshadow -extra-arg=-Wno-unused-variable \
// RUN: -extra-arg-before=-Wno-shadow -extra-arg-before=-Wfloat-conversion \
// RUN: -extra-arg-before=-Wunused-variable %s -- \
// RUN: | FileCheck -implicit-check-not='{{warning:|error:}}' %s
//
// ... a combination of -config and -extra-arg(-before):
// RUN: clang-tidy -checks='-*,modernize-use-override,clang-diagnostic-shadow,clang-diagnostic-float-conversion' \
// RUN: -config='{ExtraArgs: ["-Wno-unused-variable"], ExtraArgsBefore: ["-Wno-shadow","-Wfloat-conversion"]}' \
// RUN: -extra-arg=-Wshadow -extra-arg-before=-Wunused-variable %s -- \
// RUN: | FileCheck -implicit-check-not='{{warning:|error:}}' %s
void f(float x) {
int a;

View File

@ -0,0 +1,7 @@
// RUN: clang-tidy -checks='-*,modernize-use-override' \
// RUN: -config='{ExtraArgs: ["-DTEST4"], ExtraArgsBefore: ["-DTEST1"]}' \
// RUN: -extra-arg=-DTEST3 -extra-arg-before=-DTEST2 %s -- -v 2>&1 \
// RUN: | FileCheck -implicit-check-not='{{warning:|error:}}' %s
// CHECK: {{^}}clang Invocation:{{$}}
// CHECK-NEXT: {{"-D" "TEST1" .*"-D" "TEST2" .*"-D" "TEST3" .*"-D" "TEST4"}}