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

via cfe-commits cfe-commits at lists.llvm.org
Fri May 1 04:32:24 PDT 2026


Author: Tomohiro Kashiwada
Date: 2026-05-01T11:32:18Z
New Revision: d9fad468dfd4ae13f00c9bc1629bb519517b18fd

URL: https://github.com/llvm/llvm-project/commit/d9fad468dfd4ae13f00c9bc1629bb519517b18fd
DIFF: https://github.com/llvm/llvm-project/commit/d9fad468dfd4ae13f00c9bc1629bb519517b18fd.diff

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

fixes #195110

Added: 
    

Modified: 
    clang/lib/Sema/SemaDeclCXX.cpp
    clang/test/SemaCXX/warn-weak-vtables.cpp

Removed: 
    


################################################################################
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..9262162fdd3e9 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 GH195110 {
+// 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;


        


More information about the cfe-commits mailing list