[cfe-commits] r112334 - in /cfe/trunk: lib/Analysis/CFG.cpp test/SemaCXX/unreachable-code.cpp
Ted Kremenek
kremenek at apple.com
Fri Aug 27 17:19:02 PDT 2010
Author: kremenek
Date: Fri Aug 27 19:19:02 2010
New Revision: 112334
URL: http://llvm.org/viewvc/llvm-project?rev=112334&view=rev
Log:
Explicitly handle CXXExprWithTemporaries during CFG construction by just visiting the subexpression. While we don't do anything intelligent right now, this obviates a bogus -Wunreahable-code warning reported in PR 6130.
Modified:
cfe/trunk/lib/Analysis/CFG.cpp
cfe/trunk/test/SemaCXX/unreachable-code.cpp
Modified: cfe/trunk/lib/Analysis/CFG.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/CFG.cpp?rev=112334&r1=112333&r2=112334&view=diff
==============================================================================
--- cfe/trunk/lib/Analysis/CFG.cpp (original)
+++ cfe/trunk/lib/Analysis/CFG.cpp Fri Aug 27 19:19:02 2010
@@ -390,6 +390,12 @@
case Stmt::CXXCatchStmtClass:
return VisitCXXCatchStmt(cast<CXXCatchStmt>(S));
+ case Stmt::CXXExprWithTemporariesClass: {
+ // FIXME: Handle temporaries. For now, just visit the subexpression
+ // so we don't artificially create extra blocks.
+ return Visit(cast<CXXExprWithTemporaries>(S)->getSubExpr());
+ }
+
case Stmt::CXXMemberCallExprClass:
return VisitCXXMemberCallExpr(cast<CXXMemberCallExpr>(S), asc);
Modified: cfe/trunk/test/SemaCXX/unreachable-code.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/unreachable-code.cpp?rev=112334&r1=112333&r2=112334&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/unreachable-code.cpp (original)
+++ cfe/trunk/test/SemaCXX/unreachable-code.cpp Fri Aug 27 19:19:02 2010
@@ -39,3 +39,20 @@
bar(); // expected-warning {{will never be executed}}
}
}
+
+// PR 6130 - Don't warn about bogus unreachable code with throw's and
+// temporary objects.
+class PR6130 {
+public:
+ PR6130();
+ ~PR6130();
+};
+
+int pr6130(unsigned i) {
+ switch(i) {
+ case 0: return 1;
+ case 1: return 2;
+ default:
+ throw PR6130(); // no-warning
+ }
+}
More information about the cfe-commits
mailing list