[PATCH] D77598: Integral template argument suffix and cast printing
David Blaikie via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Oct 1 11:25:32 PDT 2021
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
More information about the cfe-commits
mailing list