diff options
author | Ted Kremenek <kremenek@apple.com> | 2011-08-25 19:28:55 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2011-08-25 19:28:55 +0000 |
commit | 1b7f49c2d6072f3e1432877a5e78ca946845bd2c (patch) | |
tree | 544f48e8c257e1c82f275ad20807f18d109fc571 /clang/lib/Analysis/ReachableCode.cpp | |
parent | 5e30972cfff2a49cb0d5952a74cc10c10b996112 (diff) | |
download | llvm-1b7f49c2d6072f3e1432877a5e78ca946845bd2c.zip llvm-1b7f49c2d6072f3e1432877a5e78ca946845bd2c.tar.gz llvm-1b7f49c2d6072f3e1432877a5e78ca946845bd2c.tar.bz2 |
Teach -Wunreachable-code about dead code caused by macro expansions. This should suppress false positives resulting from 'assert' and friends.
llvm-svn: 138576
Diffstat (limited to 'clang/lib/Analysis/ReachableCode.cpp')
-rw-r--r-- | clang/lib/Analysis/ReachableCode.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/clang/lib/Analysis/ReachableCode.cpp b/clang/lib/Analysis/ReachableCode.cpp index e3194cb..4931771 100644 --- a/clang/lib/Analysis/ReachableCode.cpp +++ b/clang/lib/Analysis/ReachableCode.cpp @@ -86,12 +86,10 @@ bool DeadCodeScan::isDeadCodeRoot(const clang::CFGBlock *Block) { } static bool isValidDeadStmt(const Stmt *S) { - SourceLocation Loc = S->getLocStart(); - if (!(Loc.isValid() && !Loc.isMacroID())) + if (S->getLocStart().isInvalid()) return false; - if (const BinaryOperator *BO = dyn_cast<BinaryOperator>(S)) { + if (const BinaryOperator *BO = dyn_cast<BinaryOperator>(S)) return BO->getOpcode() != BO_Comma; - } return true; } @@ -144,6 +142,12 @@ unsigned DeadCodeScan::scanBackwards(const clang::CFGBlock *Start, } continue; } + + // Specially handle macro-expanded code. + if (S->getLocStart().isMacroID()) { + count += clang::reachable_code::ScanReachableFromBlock(Block, Reachable); + continue; + } if (isDeadCodeRoot(Block)) { reportDeadCode(S, CB); |