dblaikie added a comment.

In D77598#3035591 <https://reviews.llvm.org/D77598#3035591>, @v.g.vassilev 
wrote:

> In D77598#3035449 <https://reviews.llvm.org/D77598#3035449>, @dblaikie wrote:
>
>> Came across this while trying to do "simplified template names" - producing 
>> template names in DWARF without template parameter lists as part of the 
>> textual name, then rebuilding that name from the structural representation 
>> of template parameters in DWARF (DW_TAG_template_*_parameter, etc). The 
>> roundtripping is implemented to ensure that the simplified names are 
>> non-lossy - that all the data is still available through the structural 
>> representation. (some names are harder or not currently possible to rebuild)
>>
>> The selective use of suffixes, especially contextually (overloading) seems 
>> like something I'll probably want to avoid entirely for DWARF to keep the 
>> names consistent across different contexts - but I am also just a bit 
>> confused about some things I'm seeing with this change.
>>
>> For instance, it looks like 
>> https://github.com/llvm/llvm-project/blob/fcdefc8575866a36e80e91024b876937ae6a9965/clang/lib/AST/Decl.cpp#L2900
>>  doesn't pass the list of template parameters, so function template names 
>> always get suffixes on their integer parameters.
>>
>> Whereas the equivalent calls for printing class template specialization 
>> names here: 
>> https://github.com/llvm/llvm-project/blob/fcdefc8575866a36e80e91024b876937ae6a9965/clang/lib/AST/DeclTemplate.cpp#L949-L959
>>  - is that just a minor bug/missing functionality?
>>
>> I'm testing a fix for that:
>>
>>   diff --git clang/lib/AST/Decl.cpp clang/lib/AST/Decl.cpp
>>   index 60ca8633224b..11cf068d2c4c 100644
>>   --- clang/lib/AST/Decl.cpp
>>   +++ clang/lib/AST/Decl.cpp
>>   @@ -2897,7 +2897,7 @@ void FunctionDecl::getNameForDiagnostic(
>>      NamedDecl::getNameForDiagnostic(OS, Policy, Qualified);
>>      const TemplateArgumentList *TemplateArgs = 
>> getTemplateSpecializationArgs();
>>      if (TemplateArgs)
>>   -    printTemplateArgumentList(OS, TemplateArgs->asArray(), Policy);
>>   +    printTemplateArgumentList(OS, TemplateArgs->asArray(), Policy, 
>> getPrimaryTemplate()->getTemplateParameters());
>>    }
>>    
>>    bool FunctionDecl::isVariadic() const {
>>
>> I've sent out a patch with ^ applied/cleanups applied: D77598 
>> <https://reviews.llvm.org/D77598>
>
> This seems an oversight on our end, thanks! You probably meant to link 
> https://reviews.llvm.org/D110898

Yep, thanks for the correction!

Do you have any interest/bandwidth to look into the one with nested namespaces 
(the other code I pointed to, in NestedNameSpecifier.cpp, above) case? At a 
quick glance I wasn't able to quite figure out how to get the template 
parameters from the TemplateSpecializationType or 
DependentTemplateSpecializationType to pass in.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77598/new/

https://reviews.llvm.org/D77598

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to