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