[PATCH] D13973: CFG: Delay creating Dtors for CompoundStmts which end in ReturnStmt
Matthias Gehre via cfe-commits
cfe-commits at lists.llvm.org
Sun Oct 25 14:27:07 PDT 2015
mgehre updated this revision to Diff 38359.
mgehre added a comment.
Update for review comments
http://reviews.llvm.org/D13973
Files:
lib/Analysis/CFG.cpp
test/Analysis/no-unreachable-dtors.cpp
Index: test/Analysis/no-unreachable-dtors.cpp
===================================================================
--- /dev/null
+++ test/Analysis/no-unreachable-dtors.cpp
@@ -0,0 +1,11 @@
+// RUN: %clang_cc1 -analyze -analyzer-checker=debug.Stats -verify -Wno-unreachable-code %s
+
+struct S {
+ ~S();
+};
+
+// the return at the end of an CompoundStmt does not lead to an unreachable block containing the dtors
+void test() { // expected-warning-re{{test -> Total CFGBlocks: {{[0-9]+}} | Unreachable CFGBlocks: 0 | Exhausted Block: no | Empty WorkList: yes}}
+ S s;
+ return;
+}
Index: lib/Analysis/CFG.cpp
===================================================================
--- lib/Analysis/CFG.cpp
+++ lib/Analysis/CFG.cpp
@@ -1942,7 +1942,15 @@
CFGBlock *CFGBuilder::VisitCompoundStmt(CompoundStmt *C) {
- addLocalScopeAndDtors(C);
+ LocalScope::const_iterator scopeBeginPos = ScopePos;
+ if (BuildOpts.AddImplicitDtors) {
+ addLocalScopeForStmt(C);
+ }
+ if (!C->body_empty() && !isa<ReturnStmt>(*C->body_rbegin())) {
+ // If the body ends with a ReturnStmt, the dtors will be added in VisitReturnStmt
+ addAutomaticObjDtors(ScopePos, scopeBeginPos, C);
+ }
+
CFGBlock *LastBlock = Block;
for (CompoundStmt::reverse_body_iterator I=C->body_rbegin(), E=C->body_rend();
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D13973.38359.patch
Type: text/x-patch
Size: 1304 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20151025/6d988a0d/attachment.bin>
More information about the cfe-commits
mailing list