On Wed, Apr 2, 2014 at 11:21 AM, David Blaikie <[email protected]> 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 > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
