diff options
author | Adrian Prantl <aprantl@apple.com> | 2014-01-21 18:42:27 +0000 |
---|---|---|
committer | Adrian Prantl <aprantl@apple.com> | 2014-01-21 18:42:27 +0000 |
commit | 3eff225a444c2ebb170b7d39e73e469f0961392b (patch) | |
tree | c9906d2322d1d593414c80bda72abe50e2a208b1 | |
parent | a88d7abeb1edc9029f27d35e89ea4eb3dc6f49f0 (diff) | |
download | bcm5719-llvm-3eff225a444c2ebb170b7d39e73e469f0961392b.tar.gz bcm5719-llvm-3eff225a444c2ebb170b7d39e73e469f0961392b.zip |
Debug info: use the file a typedef is defined in as its decl_file instead
of the current compilation unit.
As a side effect this enables many more LTO uniquing opportunities.
This reapplies r199757 with a better testcase.
llvm-svn: 199760
-rw-r--r-- | clang/lib/CodeGen/CGDebugInfo.cpp | 6 | ||||
-rw-r--r-- | clang/test/CodeGen/debug-info-typedef.c | 11 |
2 files changed, 15 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index faf6fbba1a4..ff17a03dccd 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -739,14 +739,16 @@ llvm::DIType CGDebugInfo::CreateType(const TypedefType *Ty, llvm::DIFile Unit) { return llvm::DIType(); // We don't set size information, but do specify where the typedef was // declared. - unsigned Line = getLineNumber(Ty->getDecl()->getLocation()); + SourceLocation Loc = Ty->getDecl()->getLocation(); + llvm::DIFile File = getOrCreateFile(Loc); + unsigned Line = getLineNumber(Loc); const TypedefNameDecl *TyDecl = Ty->getDecl(); llvm::DIDescriptor TypedefContext = getContextDescriptor(cast<Decl>(Ty->getDecl()->getDeclContext())); return - DBuilder.createTypedef(Src, TyDecl->getName(), Unit, Line, TypedefContext); + DBuilder.createTypedef(Src, TyDecl->getName(), File, Line, TypedefContext); } llvm::DIType CGDebugInfo::CreateType(const FunctionType *Ty, diff --git a/clang/test/CodeGen/debug-info-typedef.c b/clang/test/CodeGen/debug-info-typedef.c new file mode 100644 index 00000000000..51ebcc4d874 --- /dev/null +++ b/clang/test/CodeGen/debug-info-typedef.c @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -emit-llvm -g -I%p %s -o - | FileCheck %s +// Test that the location of the typedef points to the header file. +#line 1 "a.c" +#line 2 "b.h" +typedef int MyType; +#line 2 "a.c" + +MyType a; + +// CHECK: metadata ![[HEADER:[0-9]+]], null, metadata !"MyType"{{.*}} ; [ DW_TAG_typedef ] [MyType] [line 2, size 0, align 0, offset 0] [from int] +// CHECK: ![[HEADER]] = metadata !{metadata !"b.h", |