From 98ebbb6f4e64a893fa65aca72cab8ef6a27887ca Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Sat, 5 Apr 2014 07:46:57 +0000 Subject: [PATCH] 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 --- lib/CodeGen/CGDebugInfo.cpp | 5 ++++- test/CodeGenCXX/debug-info-global.cpp | 7 ++++++- 2 files changed, 10 insertions(+), 2 deletions(-) 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] + -- 2.50.1