================
@@ -699,12 +699,26 @@ static void
handleExcludeFromExplicitInstantiationAttr(Sema &S, Decl *D,
const auto *PD = isa<CXXRecordDecl>(D)
? cast<DeclContext>(D)
: D->getDeclContext()->getRedeclContext();
- if (const auto *RD = dyn_cast<CXXRecordDecl>(PD); RD && RD->isLocalClass()) {
- S.Diag(AL.getLoc(),
-
diag::warn_attribute_exclude_from_explicit_instantiation_local_class)
- << AL << /*IsMember=*/!isa<CXXRecordDecl>(D);
+ if (const auto *RD = dyn_cast<CXXRecordDecl>(PD)) {
+ if (RD->isLocalClass()) {
+ S.Diag(
+ AL.getLoc(),
+ diag::warn_attribute_exclude_from_explicit_instantiation_local_class)
+ << AL << /*IsMember=*/!isa<CXXRecordDecl>(D);
+ return;
+ }
+ if (!isa<TemplateDecl>(RD) && !RD->isDependentType() &&
+ !isTemplateInstantiation(RD->getTemplateSpecializationKind())) {
+ // This attribute doesn't make sense within a non-template context.
+ S.Diag(AL.getLoc(), diag::warn_attribute_ignored) << AL;
----------------
zmodem wrote:
(nit: It would be nice with a more specific diagnostic.)
https://github.com/llvm/llvm-project/pull/168171
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits