[clang] [Clang] Don't trigger `-Wweak-vtables` on an explicit instantiation declaration (PR #195189)

Aaron Ballman via cfe-commits cfe-commits at lists.llvm.org
Fri May 1 04:11:11 PDT 2026


https://github.com/AaronBallman updated https://github.com/llvm/llvm-project/pull/195189

>From 698127530ecd7dc3a6590fcdd4da2bf7dc7e6a0b Mon Sep 17 00:00:00 2001
From: kikairoya <kikairoya at gmail.com>
Date: Fri, 1 May 2026 07:23:10 +0900
Subject: [PATCH 1/2] [Clang] Don't trigger `-Wweak-vtables` on an explicit
 instantiation declaration

fixes #195110
---
 clang/lib/Sema/SemaDeclCXX.cpp           |  1 +
 clang/test/SemaCXX/warn-weak-vtables.cpp | 13 +++++++++++++
 2 files changed, 14 insertions(+)

diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index 2ff426622593c..1e339fee29ab8 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -19290,6 +19290,7 @@ bool Sema::DefineUsedVTables() {
         !(Class->getOwningModule() &&
           Class->getOwningModule()->isInterfaceOrPartition()) &&
         ClassTSK != TSK_ImplicitInstantiation &&
+        ClassTSK != TSK_ExplicitInstantiationDeclaration &&
         ClassTSK != TSK_ExplicitInstantiationDefinition) {
       const FunctionDecl *KeyFunctionDef = nullptr;
       if (!KeyFunction || (KeyFunction->hasBody(KeyFunctionDef) &&
diff --git a/clang/test/SemaCXX/warn-weak-vtables.cpp b/clang/test/SemaCXX/warn-weak-vtables.cpp
index 03431d6003814..2a2a3d7487c0d 100644
--- a/clang/test/SemaCXX/warn-weak-vtables.cpp
+++ b/clang/test/SemaCXX/warn-weak-vtables.cpp
@@ -89,6 +89,19 @@ void uses_templ() {
   TemplVirt<long> l;
 }
 
+namespace pr195110 {
+// Check that no warning is emitted on a template instantiation.
+template <class> struct basic_streambuf {
+  __attribute__((__exclude_from_explicit_instantiation__)) virtual void
+  overflow();
+
+  virtual ~basic_streambuf() {}
+};
+extern template class basic_streambuf<char>;
+
+basic_streambuf<char> b;
+}
+
 //--- module-weak-vtable.cpp
 // expected-no-diagnostics
 export module m;

>From ce5e5fecb1ffd5e39a5a1139eac3852d3557c2b7 Mon Sep 17 00:00:00 2001
From: Aaron Ballman <aaron at aaronballman.com>
Date: Fri, 1 May 2026 07:11:02 -0400
Subject: [PATCH 2/2] Update clang/test/SemaCXX/warn-weak-vtables.cpp

Co-authored-by: Corentin Jabot <corentinjabot at gmail.com>
---
 clang/test/SemaCXX/warn-weak-vtables.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/test/SemaCXX/warn-weak-vtables.cpp b/clang/test/SemaCXX/warn-weak-vtables.cpp
index 2a2a3d7487c0d..9262162fdd3e9 100644
--- a/clang/test/SemaCXX/warn-weak-vtables.cpp
+++ b/clang/test/SemaCXX/warn-weak-vtables.cpp
@@ -89,7 +89,7 @@ void uses_templ() {
   TemplVirt<long> l;
 }
 
-namespace pr195110 {
+namespace GH195110 {
 // Check that no warning is emitted on a template instantiation.
 template <class> struct basic_streambuf {
   __attribute__((__exclude_from_explicit_instantiation__)) virtual void



More information about the cfe-commits mailing list