Reapply r205655, DebugInfo: Place global constants in their appropriate context.

This was reverted in 205664 and seems to be fixed by 205668... though
that may be more by accident than anything well founded.

llvm-svn: 205669
This commit is contained in:
David Blaikie 2014-04-05 07:46:57 +00:00
parent bb11391d04
commit 506a745a0a
2 changed files with 10 additions and 2 deletions

View File

@ -3234,8 +3234,11 @@ void CGDebugInfo::EmitGlobalVariable(const ValueDecl *VD,
auto pair = DeclCache.insert(std::make_pair(VD, llvm::WeakVH()));
if (!pair.second)
return;
llvm::DIDescriptor DContext =
getContextDescriptor(dyn_cast<Decl>(VD->getDeclContext()));
llvm::DIGlobalVariable GV = DBuilder.createStaticVariable(
Unit, Name, Name, Unit, getLineNumber(VD->getLocation()), Ty, true, Init,
DContext, Name, StringRef(), Unit, getLineNumber(VD->getLocation()), Ty,
true, Init,
getOrCreateStaticDataMemberDeclarationOrNull(cast<VarDecl>(VD)));
pair.first->second = llvm::WeakVH(GV);
}

View File

@ -3,12 +3,17 @@
// Multiple references to the same constant should result in only one entry in
// the globals list.
namespace ns {
const int cnst = 42;
}
int f1() {
return cnst + cnst;
return ns::cnst + ns::cnst;
}
// CHECK: metadata [[GLOBALS:![0-9]*]], metadata {{![0-9]*}}, metadata !"{{.*}}", i32 {{[0-9]*}}} ; [ DW_TAG_compile_unit ]
// CHECK: [[GLOBALS]] = metadata !{metadata [[CNST:![0-9]*]]}
// CHECK: [[CNST]] = {{.*}}, metadata [[NS:![0-9]*]], metadata !"cnst", {{.*}}; [ DW_TAG_variable ] [cnst]
// CHECK: [[NS]] = {{.*}}; [ DW_TAG_namespace ] [ns]