Index: clang/include/clang/Basic/TargetInfo.h =================================================================== --- clang/include/clang/Basic/TargetInfo.h +++ clang/include/clang/Basic/TargetInfo.h @@ -1388,7 +1388,7 @@ virtual void setAuxTarget(const TargetInfo *Aux) {} /// Whether target allows debuginfo types for decl only variables. - virtual bool allowDebugInfoForExternalVar() const { return false; } + virtual bool allowDebugInfoForExternalVar() const { return true; } protected: /// Copy type and layout related info. Index: clang/lib/CodeGen/CGDebugInfo.cpp =================================================================== --- clang/lib/CodeGen/CGDebugInfo.cpp +++ clang/lib/CodeGen/CGDebugInfo.cpp @@ -4619,6 +4619,8 @@ assert(CGM.getCodeGenOpts().hasReducedDebugInfo()); if (D->hasAttr()) return; + if (!(DebugKind == clang::codegenoptions::FullDebugInfo)) + return; auto Align = getDeclAlignIfRequired(D, CGM.getContext()); llvm::DIFile *Unit = getOrCreateFile(D->getLocation()); Index: llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp =================================================================== --- llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp +++ llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp @@ -165,7 +165,12 @@ } if (!GV->isDefinition()) + { addFlag(*VariableDIE, dwarf::DW_AT_declaration); + + if (DD->useAllLinkageNames()) + addLinkageName(*VariableDIE, GV->getLinkageName()); + } else addGlobalName(GV->getName(), *VariableDIE, DeclContext); @@ -177,6 +182,7 @@ addTemplateParams(*VariableDIE, DINodeArray(TP)); // Add location. + if (GV->isDefinition()) addLocationAttribute(VariableDIE, GV, GlobalExprs); return VariableDIE;