r199227 - CFG: use Visit instead of VisitStmt to look through parens.
Jordan Rose
jordan_rose at apple.com
Tue Jan 14 09:29:12 PST 2014
Author: jrose
Date: Tue Jan 14 11:29:12 2014
New Revision: 199227
URL: http://llvm.org/viewvc/llvm-project?rev=199227&view=rev
Log:
CFG: use Visit instead of VisitStmt to look through parens.
PR18472
Modified:
cfe/trunk/lib/Analysis/CFG.cpp
cfe/trunk/test/Analysis/cfg.cpp
Modified: cfe/trunk/lib/Analysis/CFG.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/CFG.cpp?rev=199227&r1=199226&r2=199227&view=diff
==============================================================================
--- cfe/trunk/lib/Analysis/CFG.cpp (original)
+++ cfe/trunk/lib/Analysis/CFG.cpp Tue Jan 14 11:29:12 2014
@@ -3136,15 +3136,16 @@ CFGBlock *CFGBuilder::VisitCXXNewExpr(CX
autoCreateBlock();
appendStmt(Block, NE);
+
if (NE->getInitializer())
- Block = VisitStmt(NE->getInitializer(), asc);
+ Block = Visit(NE->getInitializer());
if (BuildOpts.AddCXXNewAllocator)
appendNewAllocator(Block, NE);
if (NE->isArray())
- Block = VisitStmt(NE->getArraySize(), asc);
+ Block = Visit(NE->getArraySize());
for (CXXNewExpr::arg_iterator I = NE->placement_arg_begin(),
E = NE->placement_arg_end(); I != E; ++I)
- Block = VisitStmt(*I, asc);
+ Block = Visit(*I);
return Block;
}
Modified: cfe/trunk/test/Analysis/cfg.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/cfg.cpp?rev=199227&r1=199226&r2=199227&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/cfg.cpp (original)
+++ cfe/trunk/test/Analysis/cfg.cpp Tue Jan 14 11:29:12 2014
@@ -372,3 +372,32 @@ void test_placement_new_array() {
int buffer[16];
MyClass* obj = new (buffer) MyClass[5];
}
+
+
+// For the helper function; see below.
+// CHECK: [B2 (ENTRY)]
+// CHECK-NEXT: Succs (1): B1
+
+// CHECK: [B2 (ENTRY)]
+// CHECK-NEXT: Succs (1): B1
+// CHECK: [B1]
+// CHECK-NEXT: 1: 0
+// CHECK-NEXT: 2: [B1.1] (ImplicitCastExpr, NullToPointer, PR18472_t)
+// CHECK-NEXT: 3: (PR18472_t)[B1.2] (CStyleCastExpr, NoOp, PR18472_t)
+// CHECK-NEXT: 4: CFGNewAllocator(int *)
+// CHECK-NEXT: 5: new (([B1.3])) int
+// CHECK-NEXT: 6: return [B1.5];
+// CHECK-NEXT: Preds (1): B2
+// CHECK-NEXT: Succs (1): B0
+// CHECK: [B0 (EXIT)]
+// CHECK-NEXT: Preds (1): B1
+
+extern "C" typedef int *PR18472_t;
+void *operator new (unsigned long, PR18472_t);
+template <class T> T *PR18472() {
+ return new (((PR18472_t) 0)) T;
+}
+void PR18472_helper() {
+ PR18472<int>();
+}
+
More information about the cfe-commits
mailing list