r203336 - [-Wunreachabe-code] Don't warn about unreachable destructors for temporaries.

Ted Kremenek kremenek at apple.com
Fri Mar 7 18:22:33 PST 2014


Author: kremenek
Date: Fri Mar  7 20:22:32 2014
New Revision: 203336

URL: http://llvm.org/viewvc/llvm-project?rev=203336&view=rev
Log:
[-Wunreachabe-code] Don't warn about unreachable destructors for temporaries.

This can possibly be refined later, but right now the experience
is so incomprehensible for a user to understand what is going on
this isn't a useful warning.

Modified:
    cfe/trunk/lib/Analysis/ReachableCode.cpp
    cfe/trunk/test/SemaCXX/warn-unreachable.cpp

Modified: cfe/trunk/lib/Analysis/ReachableCode.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/ReachableCode.cpp?rev=203336&r1=203335&r2=203336&view=diff
==============================================================================
--- cfe/trunk/lib/Analysis/ReachableCode.cpp (original)
+++ cfe/trunk/lib/Analysis/ReachableCode.cpp Fri Mar  7 20:22:32 2014
@@ -397,9 +397,11 @@ const Stmt *DeadCodeScan::findDeadCode(c
     }
 
   if (CFGTerminator T = Block->getTerminator()) {
-    const Stmt *S = T.getStmt();
-    if (isValidDeadStmt(S))
-      return S;
+    if (!T.isTemporaryDtorsBranch()) {
+      const Stmt *S = T.getStmt();
+      if (isValidDeadStmt(S))
+        return S;
+    }
   }
 
   return 0;

Modified: cfe/trunk/test/SemaCXX/warn-unreachable.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/warn-unreachable.cpp?rev=203336&r1=203335&r2=203336&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/warn-unreachable.cpp (original)
+++ cfe/trunk/test/SemaCXX/warn-unreachable.cpp Fri Mar  7 20:22:32 2014
@@ -162,3 +162,16 @@ int test_global_as_conditionVariable() {
   return 0; // no-warning
 }
 
+// Handle unreachable temporary destructors.
+class A {
+public:
+  A();
+  ~A();
+};
+
+__attribute__((noreturn))
+void raze(const A& x);
+
+void test_with_unreachable_tmp_dtors(int x) {
+  raze(x ? A() : A()); // no-warning
+}





More information about the cfe-commits mailing list