Teach -Wunreachable-code about dead code caused by macro expansions.  This should suppress false positives resulting from 'assert' and friends.

llvm-svn: 138576
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 @@
 }
 
 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 @@
       }
       continue;
     }
+    
+    // Specially handle macro-expanded code.
+    if (S->getLocStart().isMacroID()) {
+      count += clang::reachable_code::ScanReachableFromBlock(Block, Reachable);
+      continue;
+    }
 
     if (isDeadCodeRoot(Block)) {
       reportDeadCode(S, CB);