================
@@ -13464,6 +13464,14 @@ Decl *Sema::ActOnAliasDeclaration(Scope *S,
AccessSpecifier AS,
}
TemplateParameterList *TemplateParams = TemplateParamLists[0];
+ // Check shadowing of a template parameter name
+ for (NamedDecl *TP : TemplateParams->asArray()) {
+ if (NameInfo.getName() == TP->getDeclName()) {
+ DiagnoseTemplateParameterShadow(Name.StartLocation, TP);
+ return nullptr;
+ }
+ }
+
----------------
zygoloid wrote:
I would think that we still need to do this `S = S->getDeclParent();` step,
like we do in `HandleDeclarator` and elsewhere, but we're just doing it at the
wrong moment -- it should be done after we do lookup and before we pass `S` to
`FilterLookupForScope` and `PushOnScopeChains`.
I think removing it entirely happens to work because alias templates can only
appear in scopes that correspond to a `DeclContext`, so the change to push the
name into the "wrong" `Scope` turns out to not matter -- lookup in the
`DeclContext` finds it anyway. So I'm not sure if the difference is observable,
but it would be more correct to move the `S = S->getDeclParent();` step to
after the lookup instead of removing it entirely. (This is what
`HandleDeclarator` does, so it's what we do for `typedef`.)
https://github.com/llvm/llvm-project/pull/123533
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits