DebugInfo: More accurate line information for placement new.

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
This commit is contained in:
David Blaikie 2014-12-14 18:48:18 +00:00
parent 17e2633cd6
commit 09f12fa1ca
2 changed files with 8 additions and 3 deletions

View 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;

View 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,