forked from OSchip/llvm-project
DebugInfo: Location information for scalar new expressions
llvm-svn: 223937
This commit is contained in:
parent
0df50938be
commit
a2c1124f9c
|
@ -754,14 +754,15 @@ static llvm::Value *EmitCXXNewAllocSize(CodeGenFunction &CGF,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void StoreAnyExprIntoOneUnit(CodeGenFunction &CGF, const Expr *Init,
|
static void StoreAnyExprIntoOneUnit(CodeGenFunction &CGF, const Expr *Init,
|
||||||
QualType AllocType, llvm::Value *NewPtr) {
|
QualType AllocType, llvm::Value *NewPtr,
|
||||||
|
SourceLocation DbgLoc = SourceLocation()) {
|
||||||
// FIXME: Refactor with EmitExprAsInit.
|
// FIXME: Refactor with EmitExprAsInit.
|
||||||
CharUnits Alignment = CGF.getContext().getTypeAlignInChars(AllocType);
|
CharUnits Alignment = CGF.getContext().getTypeAlignInChars(AllocType);
|
||||||
switch (CGF.getEvaluationKind(AllocType)) {
|
switch (CGF.getEvaluationKind(AllocType)) {
|
||||||
case TEK_Scalar:
|
case TEK_Scalar:
|
||||||
CGF.EmitScalarInit(Init, nullptr, CGF.MakeAddrLValue(NewPtr, AllocType,
|
CGF.EmitScalarInit(Init, nullptr,
|
||||||
Alignment),
|
CGF.MakeAddrLValue(NewPtr, AllocType, Alignment), false,
|
||||||
false);
|
DbgLoc);
|
||||||
return;
|
return;
|
||||||
case TEK_Complex:
|
case TEK_Complex:
|
||||||
CGF.EmitComplexExprIntoLValue(Init, CGF.MakeAddrLValue(NewPtr, AllocType,
|
CGF.EmitComplexExprIntoLValue(Init, CGF.MakeAddrLValue(NewPtr, AllocType,
|
||||||
|
@ -1023,7 +1024,8 @@ static void EmitNewInitializer(CodeGenFunction &CGF, const CXXNewExpr *E,
|
||||||
CGF.EmitNewArrayInitializer(E, ElementType, NewPtr, NumElements,
|
CGF.EmitNewArrayInitializer(E, ElementType, NewPtr, NumElements,
|
||||||
AllocSizeWithoutCookie);
|
AllocSizeWithoutCookie);
|
||||||
else if (const Expr *Init = E->getInitializer())
|
else if (const Expr *Init = E->getInitializer())
|
||||||
StoreAnyExprIntoOneUnit(CGF, Init, E->getAllocatedType(), NewPtr);
|
StoreAnyExprIntoOneUnit(CGF, Init, E->getAllocatedType(), NewPtr,
|
||||||
|
E->getStartLoc());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Emit a call to an operator new or operator delete function, as implicitly
|
/// Emit a call to an operator new or operator delete function, as implicitly
|
||||||
|
|
|
@ -99,6 +99,16 @@ void f9(int i) {
|
||||||
src1)[src2()];
|
src1)[src2()];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void *operator new(unsigned long, void *);
|
||||||
|
|
||||||
|
// CHECK-LABEL: define
|
||||||
|
void f10() {
|
||||||
|
void *void_src();
|
||||||
|
( // CHECK: store {{.*}} !dbg [[DBG_F10:!.*]]
|
||||||
|
#line 1100
|
||||||
|
new (void_src()) int(src()));
|
||||||
|
}
|
||||||
|
|
||||||
// CHECK: [[DBG_F1]] = metadata !{i32 100,
|
// CHECK: [[DBG_F1]] = metadata !{i32 100,
|
||||||
// CHECK: [[DBG_FOO_VALUE]] = metadata !{i32 200,
|
// CHECK: [[DBG_FOO_VALUE]] = metadata !{i32 200,
|
||||||
// CHECK: [[DBG_FOO_REF]] = metadata !{i32 202,
|
// CHECK: [[DBG_FOO_REF]] = metadata !{i32 202,
|
||||||
|
@ -111,3 +121,4 @@ void f9(int i) {
|
||||||
// CHECK: [[DBG_F7]] = metadata !{i32 800,
|
// CHECK: [[DBG_F7]] = metadata !{i32 800,
|
||||||
// CHECK: [[DBG_F8]] = metadata !{i32 900,
|
// CHECK: [[DBG_F8]] = metadata !{i32 900,
|
||||||
// CHECK: [[DBG_F9]] = metadata !{i32 1000,
|
// CHECK: [[DBG_F9]] = metadata !{i32 1000,
|
||||||
|
// CHECK: [[DBG_F10]] = metadata !{i32 1100,
|
||||||
|
|
Loading…
Reference in New Issue