aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/CGDebugInfo.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-05-05 05:16:17 +0000
committerChris Lattner <sabre@nondot.org>2009-05-05 05:16:17 +0000
commitd37d9b5bf9dd5addf6d8d3b20c4d828218c99d23 (patch)
treed2b44912a4fb4120cf83b4864726f1945cf1ce21 /lib/CodeGen/CGDebugInfo.cpp
parent9e55b8a8b34ca1f401425cd14a32ba55d4f7aa73 (diff)
fix some more cases where we'd emit a file with a line of 0 for implicit
types. In this case, it was objc_selector and objc_class. This fixes rdar://6852754 - clang sometimes generates incorrect/unknown file/line info for DW_TAG__structure_type dies git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70969 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGDebugInfo.cpp')
-rw-r--r--lib/CodeGen/CGDebugInfo.cpp18
1 files changed, 13 insertions, 5 deletions
diff --git a/lib/CodeGen/CGDebugInfo.cpp b/lib/CodeGen/CGDebugInfo.cpp
index a720cbc7a4..67054f66b5 100644
--- a/lib/CodeGen/CGDebugInfo.cpp
+++ b/lib/CodeGen/CGDebugInfo.cpp
@@ -275,9 +275,13 @@ llvm::DIType CGDebugInfo::CreateType(const RecordType *Ty,
// Get overall information about the record type for the debug info.
std::string Name = Decl->getNameAsString();
- llvm::DICompileUnit DefUnit = getOrCreateCompileUnit(Decl->getLocation());
PresumedLoc PLoc = SM.getPresumedLoc(Decl->getLocation());
- unsigned Line = PLoc.isInvalid() ? 0 : PLoc.getLine();
+ llvm::DICompileUnit DefUnit;
+ unsigned Line = 0;
+ if (!PLoc.isInvalid()) {
+ DefUnit = getOrCreateCompileUnit(Decl->getLocation());
+ Line = PLoc.getLine();
+ }
// Records and classes and unions can all be recursive. To handle them, we
// first generate a debug descriptor for the struct as a forward declaration.
@@ -317,10 +321,14 @@ llvm::DIType CGDebugInfo::CreateType(const RecordType *Ty,
// Get the location for the field.
SourceLocation FieldDefLoc = Field->getLocation();
- llvm::DICompileUnit FieldDefUnit = getOrCreateCompileUnit(FieldDefLoc);
PresumedLoc PLoc = SM.getPresumedLoc(FieldDefLoc);
- unsigned FieldLine = PLoc.isInvalid() ? 0 : PLoc.getLine();
-
+ llvm::DICompileUnit FieldDefUnit;
+ unsigned FieldLine = 0;
+
+ if (!PLoc.isInvalid()) {
+ FieldDefUnit = getOrCreateCompileUnit(FieldDefLoc);
+ FieldLine = PLoc.getLine();
+ }
QualType FType = Field->getType();
uint64_t FieldSize = 0;