DebugInfo: Change DIBuilder to make distinct DIGlobalVariables
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>
Sat, 23 Apr 2016 22:29:09 +0000 (22:29 +0000)
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>
Sat, 23 Apr 2016 22:29:09 +0000 (22:29 +0000)
A long overdue change to make DIGlobalVariable distinct.  Much like
DISubprogram definitions (changed in r246098), it isn't logical to
unique DIGlobalVariable definitions from two different compile units.

(Longer-term, we should also find a way to reverse the link between
GlobalVariable and DIGlobalVariable, and between DIGlobalVariable and
DICompileUnit, so that debug info to do with optimized-out globals
disappears.  Admittedly it's harder than with Function/DISubprogram,
since global variables may be constant-folded and the debug info should
still describe that somehow.)

llvm-svn: 267301

llvm/lib/IR/DIBuilder.cpp

index f0baff7..9a61afb 100644 (file)
@@ -560,10 +560,10 @@ DIGlobalVariable *DIBuilder::createGlobalVariable(
     MDNode *Decl) {
   checkGlobalVariableScope(Context);
 
-  auto *N =
-      DIGlobalVariable::get(VMContext, cast_or_null<DIScope>(Context), Name,
-                            LinkageName, F, LineNumber, Ty, isLocalToUnit, true,
-                            Val, cast_or_null<DIDerivedType>(Decl));
+  auto *N = DIGlobalVariable::getDistinct(
+      VMContext, cast_or_null<DIScope>(Context), Name, LinkageName, F,
+      LineNumber, Ty, isLocalToUnit, true, Val,
+      cast_or_null<DIDerivedType>(Decl));
   AllGVs.push_back(N);
   return N;
 }