aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Analysis/ReachableCode.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2011-08-25 19:28:55 +0000
committerTed Kremenek <kremenek@apple.com>2011-08-25 19:28:55 +0000
commit1b7f49c2d6072f3e1432877a5e78ca946845bd2c (patch)
tree544f48e8c257e1c82f275ad20807f18d109fc571 /clang/lib/Analysis/ReachableCode.cpp
parent5e30972cfff2a49cb0d5952a74cc10c10b996112 (diff)
downloadllvm-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.cpp12
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);