r223825 - DebugInfo: Emit the correct location for initialization of a complex variable
David Blaikie
dblaikie at gmail.com
Tue Dec 9 12:52:24 PST 2014
Author: dblaikie
Date: Tue Dec 9 14:52:24 2014
New Revision: 223825
URL: http://llvm.org/viewvc/llvm-project?rev=223825&view=rev
Log:
DebugInfo: Emit the correct location for initialization of a complex variable
Especially useful for sanitizer reports.
Modified:
cfe/trunk/lib/CodeGen/CGClass.cpp
cfe/trunk/lib/CodeGen/CGExprComplex.cpp
cfe/trunk/lib/CodeGen/CodeGenFunction.h
cfe/trunk/test/CodeGenCXX/debug-info-line.cpp
Modified: cfe/trunk/lib/CodeGen/CGClass.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGClass.cpp?rev=223825&r1=223824&r2=223825&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGClass.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGClass.cpp Tue Dec 9 14:52:24 2014
@@ -616,7 +616,7 @@ void CodeGenFunction::EmitInitializerFor
}
break;
case TEK_Complex:
- EmitComplexExprIntoLValue(Init, LHS, /*isInit*/ true);
+ EmitComplexExprIntoLValue(Init, LHS, /*isInit*/ true, DbgLoc);
break;
case TEK_Aggregate: {
llvm::Value *ArrayIndexVar = nullptr;
Modified: cfe/trunk/lib/CodeGen/CGExprComplex.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprComplex.cpp?rev=223825&r1=223824&r2=223825&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGExprComplex.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGExprComplex.cpp Tue Dec 9 14:52:24 2014
@@ -81,7 +81,8 @@ public:
/// EmitStoreOfComplex - Store the specified real/imag parts into the
/// specified value pointer.
- void EmitStoreOfComplex(ComplexPairTy Val, LValue LV, bool isInit);
+ void EmitStoreOfComplex(ComplexPairTy Val, LValue LV, bool isInit,
+ SourceLocation DbgLoc = SourceLocation());
/// EmitComplexToComplexCast - Emit a cast from complex value Val to DestType.
ComplexPairTy EmitComplexToComplexCast(ComplexPairTy Val, QualType SrcType,
@@ -333,9 +334,12 @@ ComplexPairTy ComplexExprEmitter::EmitLo
/// EmitStoreOfComplex - Store the specified real/imag parts into the
/// specified value pointer.
-void ComplexExprEmitter::EmitStoreOfComplex(ComplexPairTy Val,
- LValue lvalue,
- bool isInit) {
+void ComplexExprEmitter::EmitStoreOfComplex(ComplexPairTy Val, LValue lvalue,
+ bool isInit,
+ SourceLocation DbgLoc) {
+ if (auto *DI = CGF.getDebugInfo())
+ DI->EmitLocation(CGF.Builder, DbgLoc);
+
if (lvalue.getType()->isAtomicType())
return CGF.EmitAtomicStore(RValue::getComplex(Val), lvalue, isInit);
@@ -910,6 +914,7 @@ LValue ComplexExprEmitter::EmitBinAssign
LValue LHS = CGF.EmitLValue(E->getLHS());
// Store the result value into the LHS lvalue.
+ // FIXME
EmitStoreOfComplex(Val, LHS, /*isInit*/ false);
return LHS;
@@ -1038,18 +1043,19 @@ ComplexPairTy CodeGenFunction::EmitCompl
}
void CodeGenFunction::EmitComplexExprIntoLValue(const Expr *E, LValue dest,
- bool isInit) {
+ bool isInit,
+ SourceLocation DbgLoc) {
assert(E && getComplexType(E->getType()) &&
"Invalid complex expression to emit");
ComplexExprEmitter Emitter(*this);
ComplexPairTy Val = Emitter.Visit(const_cast<Expr*>(E));
- Emitter.EmitStoreOfComplex(Val, dest, isInit);
+ Emitter.EmitStoreOfComplex(Val, dest, isInit, DbgLoc);
}
/// EmitStoreOfComplex - Store a complex number into the specified l-value.
void CodeGenFunction::EmitStoreOfComplex(ComplexPairTy V, LValue dest,
- bool isInit) {
- ComplexExprEmitter(*this).EmitStoreOfComplex(V, dest, isInit);
+ bool isInit, SourceLocation DbgLoc) {
+ ComplexExprEmitter(*this).EmitStoreOfComplex(V, dest, isInit, DbgLoc);
}
/// EmitLoadOfComplex - Load a complex number from the specified address.
Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.h?rev=223825&r1=223824&r2=223825&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CodeGenFunction.h (original)
+++ cfe/trunk/lib/CodeGen/CodeGenFunction.h Tue Dec 9 14:52:24 2014
@@ -2524,10 +2524,12 @@ public:
/// EmitComplexExprIntoLValue - Emit the given expression of complex
/// type and place its result into the specified l-value.
- void EmitComplexExprIntoLValue(const Expr *E, LValue dest, bool isInit);
+ void EmitComplexExprIntoLValue(const Expr *E, LValue dest, bool isInit,
+ SourceLocation DbgLoc = SourceLocation());
/// EmitStoreOfComplex - Store a complex number into the specified l-value.
- void EmitStoreOfComplex(ComplexPairTy V, LValue dest, bool isInit);
+ void EmitStoreOfComplex(ComplexPairTy V, LValue dest, bool isInit,
+ SourceLocation DbgLoc = SourceLocation());
/// EmitLoadOfComplex - Load a complex number from the specified l-value.
ComplexPairTy EmitLoadOfComplex(LValue src, SourceLocation loc);
Modified: cfe/trunk/test/CodeGenCXX/debug-info-line.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-line.cpp?rev=223825&r1=223824&r2=223825&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenCXX/debug-info-line.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/debug-info-line.cpp Tue Dec 9 14:52:24 2014
@@ -1,6 +1,8 @@
// RUN: %clang_cc1 -g -std=c++11 -S -emit-llvm %s -o - | FileCheck %s
-int &src(); int* sink();
+int &src();
+int* sink();
+__complex float complex_src();
void f1() {
#line 100
@@ -13,6 +15,7 @@ void f1() {
struct foo {
int i;
int &j;
+ __complex float k;
foo();
};
@@ -21,13 +24,17 @@ foo::foo()
#line 200
i
(src()),
- j
- (src())
// CHECK: store i32 {{.*}} !dbg [[DBG_FOO_VALUE:!.*]]
+ j
+ (src()),
// CHECK: store i32* {{.*}} !dbg [[DBG_FOO_REF:!.*]]
+ k
+ (complex_src())
+ // CHECK: store float {{.*}} !dbg [[DBG_FOO_COMPLEX:!.*]]
{
}
// CHECK: [[DBG_F1]] = metadata !{i32 100,
// CHECK: [[DBG_FOO_VALUE]] = metadata !{i32 200,
-// CHECK: [[DBG_FOO_REF]] = metadata !{i32 202,
+// CHECK: [[DBG_FOO_REF]] = metadata !{i32 203,
+// CHECK: [[DBG_FOO_COMPLEX]] = metadata !{i32 206,
More information about the cfe-commits
mailing list