================
@@ -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

Reply via email to