diff options
author | Reid Kleckner <rnk@google.com> | 2015-12-16 02:04:40 +0000 |
---|---|---|
committer | Reid Kleckner <rnk@google.com> | 2015-12-16 02:04:40 +0000 |
commit | 60103383f097b6580ecb4519eeb87defdb7c05c9 (patch) | |
tree | 592405e251c513e97e39793318334ce622ee79e4 /clang/lib/CodeGen/CGDebugInfo.cpp | |
parent | 23319014a9a795dd6b19ee4773aca14989dc5f65 (diff) | |
download | bcm5719-llvm-60103383f097b6580ecb4519eeb87defdb7c05c9.tar.gz bcm5719-llvm-60103383f097b6580ecb4519eeb87defdb7c05c9.zip |
Print qualified display names when emitting CodeView
This is what debuggers expect. Words towards fixing PR21528.
llvm-svn: 255744
Diffstat (limited to 'clang/lib/CodeGen/CGDebugInfo.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGDebugInfo.cpp | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index 29ebfc62389..c2ec03f34e4 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -183,22 +183,31 @@ StringRef CGDebugInfo::getFunctionName(const FunctionDecl *FD) { IdentifierInfo *FII = FD->getIdentifier(); FunctionTemplateSpecializationInfo *Info = FD->getTemplateSpecializationInfo(); - if (!Info && FII) + + if (!Info && FII && !CGM.getCodeGenOpts().EmitCodeView) return FII->getName(); // Otherwise construct human readable name for debug info. SmallString<128> NS; llvm::raw_svector_ostream OS(NS); - FD->printName(OS); - - // Add any template specialization args. - if (Info) { - const TemplateArgumentList *TArgs = Info->TemplateArguments; - const TemplateArgument *Args = TArgs->data(); - unsigned NumArgs = TArgs->size(); - PrintingPolicy Policy(CGM.getLangOpts()); - TemplateSpecializationType::PrintTemplateArgumentList(OS, Args, NumArgs, - Policy); + PrintingPolicy Policy(CGM.getLangOpts()); + + if (CGM.getCodeGenOpts().EmitCodeView) { + // Print a fully qualified name like MSVC would. + Policy.MSVCFormatting = true; + FD->printQualifiedName(OS, Policy); + } else { + // Print the unqualified name with some template arguments. This is what + // DWARF-based debuggers expect. + FD->printName(OS); + // Add any template specialization args. + if (Info) { + const TemplateArgumentList *TArgs = Info->TemplateArguments; + const TemplateArgument *Args = TArgs->data(); + unsigned NumArgs = TArgs->size(); + TemplateSpecializationType::PrintTemplateArgumentList(OS, Args, NumArgs, + Policy); + } } // Copy this name on the side and use its reference. |