[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