r205447 - DebugInfo: Include default template arguments in template type names
Eric Christopher
echristo at gmail.com
Wed Apr 2 11:40:33 PDT 2014
On Wed, Apr 2, 2014 at 11:21 AM, David Blaikie <dblaikie at gmail.com> wrote:
> Author: dblaikie
> Date: Wed Apr 2 13:21:09 2014
> New Revision: 205447
>
> URL: http://llvm.org/viewvc/llvm-project?rev=205447&view=rev
> Log:
> DebugInfo: Include default template arguments in template type names
>
> This was committed 4 years ago in 108916 with insufficient testing to
> explain why the "getTypeAsWritten" case was appropriate. Experience says
> that it isn't - the presence or absence of an explicit instantiation
> declaration was causing this code to generate either i<int> or i<int,
> int>.
>
Think I'll go with "insufficient experience at the time".
> That didn't seem to be a useful distinction, and omitting the template
> arguments was destructive to debuggers being able to associate the two
> types across translation units or across compilers (GCC, reasonably,
> never omitted the arguments).
Weird. I recall not wanting to do this at some point, but I don't remember why.
-eric
>
> Modified:
> cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
> cfe/trunk/test/CodeGenCXX/debug-info-template-explicit-specialization.cpp
>
> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=205447&r1=205446&r2=205447&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Wed Apr 2 13:21:09 2014
> @@ -228,34 +228,20 @@ StringRef CGDebugInfo::getSelectorName(S
> /// getClassName - Get class name including template argument list.
> StringRef
> CGDebugInfo::getClassName(const RecordDecl *RD) {
> - const ClassTemplateSpecializationDecl *Spec
> - = dyn_cast<ClassTemplateSpecializationDecl>(RD);
> - if (!Spec)
> + // quick optimization to avoid having to intern strings that are already
> + // stored reliably elsewhere
> + if (!isa<ClassTemplateSpecializationDecl>(RD))
> return RD->getName();
>
> - const TemplateArgument *Args;
> - unsigned NumArgs;
> - if (TypeSourceInfo *TAW = Spec->getTypeAsWritten()) {
> - const TemplateSpecializationType *TST =
> - cast<TemplateSpecializationType>(TAW->getType());
> - Args = TST->getArgs();
> - NumArgs = TST->getNumArgs();
> - } else {
> - const TemplateArgumentList &TemplateArgs = Spec->getTemplateArgs();
> - Args = TemplateArgs.data();
> - NumArgs = TemplateArgs.size();
> - }
> - StringRef Name = RD->getIdentifier()->getName();
> - PrintingPolicy Policy(CGM.getLangOpts());
> - SmallString<128> TemplateArgList;
> + SmallString<128> Name;
> {
> - llvm::raw_svector_ostream OS(TemplateArgList);
> - TemplateSpecializationType::PrintTemplateArgumentList(OS, Args, NumArgs,
> - Policy);
> + llvm::raw_svector_ostream OS(Name);
> + RD->getNameForDiagnostic(OS, CGM.getContext().getPrintingPolicy(),
> + /*Qualified*/ false);
> }
>
> // Copy this name on the side and use its reference.
> - return internString(Name, TemplateArgList);
> + return internString(Name);
> }
>
> /// getOrCreateFile - Get the file debug info descriptor for the input location.
>
> Modified: cfe/trunk/test/CodeGenCXX/debug-info-template-explicit-specialization.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-template-explicit-specialization.cpp?rev=205447&r1=205446&r2=205447&view=diff
> ==============================================================================
> --- cfe/trunk/test/CodeGenCXX/debug-info-template-explicit-specialization.cpp (original)
> +++ cfe/trunk/test/CodeGenCXX/debug-info-template-explicit-specialization.cpp Wed Apr 2 13:21:09 2014
> @@ -84,3 +84,10 @@ template<> void i<int>::f();
> extern template class i<int>;
> i<int> ii;
> // CHECK: ; [ DW_TAG_structure_type ] [i<int>] {{.*}} [def]
> +
> +template <typename T1, typename T2 = T1>
> +struct j {
> +};
> +extern template class j<int>;
> +j<int> jj;
> +// CHECK: ; [ DW_TAG_structure_type ] [j<int, int>]
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list