From: David Blaikie Date: Sat, 5 Apr 2014 07:46:57 +0000 (+0000) Subject: Reapply r205655, DebugInfo: Place global constants in their appropriate context. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=98ebbb6f4e64a893fa65aca72cab8ef6a27887ca;p=clang 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. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@205669 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGDebugInfo.cpp b/lib/CodeGen/CGDebugInfo.cpp index 7275e734f6..7c6a349341 100644 --- a/lib/CodeGen/CGDebugInfo.cpp +++ b/lib/CodeGen/CGDebugInfo.cpp @@ -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(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(VD))); pair.first->second = llvm::WeakVH(GV); } diff --git a/test/CodeGenCXX/debug-info-global.cpp b/test/CodeGenCXX/debug-info-global.cpp index 5f075b9613..8dc30c8923 100644 --- a/test/CodeGenCXX/debug-info-global.cpp +++ b/test/CodeGenCXX/debug-info-global.cpp @@ -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] +