vsapsai added a comment.
Does your fix work for deeper nesting too (e.g. template in template in
template)? Looks like it should, just want to confirm.
Are there other places where you need to avoid calling
`DeduceTemplateArguments` due to templates depth mismatch?
`CheckDependentFunctionTemplateSpecialization` should be OK as it's not
deducing template arguments. But I'm not sure about
`CheckMemberSpecialization`. It doesn't call `DeduceTemplateArguments` directly
but I haven't dug deep enough to confirm it's not performing deduction
indirectly.
================
Comment at: lib/Sema/SemaDecl.cpp:8307-8308
isFunctionTemplateSpecialization = true;
+ if (Invalid && TemplateParams->getLAngleLoc().isInvalid())
+ HasFabricatedTemplateSpecializationTemplateParams = true;
// For source fidelity, store all the template param lists.
----------------
Checking if angle location is invalid looks suspicious. It can be my lack of
knowledge but I expect various locations not to convey sema information.
================
Comment at: lib/Sema/SemaDecl.cpp:8880-8881
<< NewFD->getDeclName();
- } else if (CheckFunctionTemplateSpecialization(NewFD,
+ } else if (!HasFabricatedTemplateSpecializationTemplateParams &&
+ CheckFunctionTemplateSpecialization(NewFD,
(HasExplicitTemplateArgs ? &TemplateArgs
----------------
Will something more general like
!NewFD->isInvalidDecl() && CheckFunctionTemplateSpecialization(...)
work here? Because if matching template parameters to scope specifier fails,
`NewFD` is marked as invalid decl and seems like we can use that.
Repository:
rL LLVM
https://reviews.llvm.org/D37341
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits