DebugInfo: More accurate line information for placement new.
authorDavid Blaikie <dblaikie@gmail.com>
Sun, 14 Dec 2014 18:48:18 +0000 (18:48 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Sun, 14 Dec 2014 18:48:18 +0000 (18:48 +0000)
This actually came up as a break in UBSan tests (look for a follow-up
commit to this one to see the UBSan test fallout) when I tried a broader
fix to location information.

I have some other ideas about how to do that broader change & will keep
looking into it.

llvm-svn: 224221

clang/lib/CodeGen/CGExprCXX.cpp
clang/test/CodeGenCXX/debug-info-line.cpp

index 65e4b2d..31f9141 100644 (file)
@@ -1269,6 +1269,9 @@ llvm::Value *CodeGenFunction::EmitCXXNewExpr(const CXXNewExpr *E) {
                E->placement_arg_end(), /* CalleeDecl */ nullptr,
                /*ParamsToSkip*/ 1);
 
+  if (auto *DI = getDebugInfo())
+    DI->EmitLocation(Builder, E->getLocStart());
+
   // Emit the allocation call.  If the allocator is a global placement
   // operator, just "inline" it directly.
   RValue RV;
index f855c47..6694a73 100644 (file)
@@ -99,12 +99,13 @@ void f9(int i) {
       src1)[src2()];
 }
 
-void *operator new(decltype(sizeof(1)), void *);
+inline void *operator new(decltype(sizeof(1)), void *p) noexcept { return p; }
 
 // CHECK-LABEL: define
 void f10() {
   void *void_src();
-  ( // CHECK: store {{.*}} !dbg [[DBG_F10:!.*]]
+  ( // CHECK: icmp {{.*}} !dbg [[DBG_F10_ICMP:.*]]
+    // CHECK: store {{.*}} !dbg [[DBG_F10_STORE:!.*]]
 #line 1100
       new (void_src()) int(src()));
 }
@@ -121,4 +122,5 @@ void f10() {
 // CHECK: [[DBG_F7]] = metadata !{i32 800,
 // CHECK: [[DBG_F8]] = metadata !{i32 900,
 // CHECK: [[DBG_F9]] = metadata !{i32 1000,
-// CHECK: [[DBG_F10]] = metadata !{i32 1100,
+// CHECK: [[DBG_F10_ICMP]] = metadata !{i32 1100,
+// CHECK: [[DBG_F10_STORE]] = metadata !{i32 1100,