diff options
author | Alexander Kornienko <alexfh@google.com> | 2016-04-23 00:00:08 +0000 |
---|---|---|
committer | Alexander Kornienko <alexfh@google.com> | 2016-04-23 00:00:08 +0000 |
commit | 5142c0d7fa8aecf32b4b202798a20d9c65ae18ce (patch) | |
tree | d3bde45c98d517f8a8664d5cb5877821d0b456b3 /clang-tools-extra/clang-tidy/misc/MacroRepeatedSideEffectsCheck.cpp | |
parent | 99ed6057992ff8cb25a0c533cf84de37cf80a279 (diff) | |
download | bcm5719-llvm-5142c0d7fa8aecf32b4b202798a20d9c65ae18ce.tar.gz bcm5719-llvm-5142c0d7fa8aecf32b4b202798a20d9c65ae18ce.zip |
[clang-tidy] Fix misc-macro-repeated-side-effects false positive with stringified arguments
llvm-svn: 267254
Diffstat (limited to 'clang-tools-extra/clang-tidy/misc/MacroRepeatedSideEffectsCheck.cpp')
-rw-r--r-- | clang-tools-extra/clang-tidy/misc/MacroRepeatedSideEffectsCheck.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/clang-tools-extra/clang-tidy/misc/MacroRepeatedSideEffectsCheck.cpp b/clang-tools-extra/clang-tidy/misc/MacroRepeatedSideEffectsCheck.cpp index e8ad7c57efc..699966a8140 100644 --- a/clang-tools-extra/clang-tidy/misc/MacroRepeatedSideEffectsCheck.cpp +++ b/clang-tools-extra/clang-tidy/misc/MacroRepeatedSideEffectsCheck.cpp @@ -86,6 +86,7 @@ unsigned MacroRepeatedPPCallbacks::countArgumentExpansions( int SkipParenCount = 0; // Has a __builtin_constant_p been found? bool FoundBuiltin = false; + bool PrevTokenIsHash = false; // Count when "?" is reached. The "Current" will get this value when the ":" // is reached. std::stack<unsigned, SmallVector<unsigned, 8>> CountAtQuestion; @@ -98,6 +99,16 @@ unsigned MacroRepeatedPPCallbacks::countArgumentExpansions( if (FoundBuiltin && T.isOneOf(tok::question, tok::ampamp, tok::pipepipe)) return Max; + // Skip stringified tokens. + if (T.is(tok::hash)) { + PrevTokenIsHash = true; + continue; + } + if (PrevTokenIsHash) { + PrevTokenIsHash = false; + continue; + } + // Handling of ? and :. if (T.is(tok::question)) { CountAtQuestion.push(Current); |