https://gcc.gnu.org/g:536ae8191fd28e580ed1e7ef848026a11923f513

commit r16-5143-g536ae8191fd28e580ed1e7ef848026a11923f513
Author: Nathaniel Shead <[email protected]>
Date:   Tue Nov 11 10:16:58 2025 +1100

    c++/modules: Fix ICE in instantiating_tu_local_entity [PR122628]
    
    I'd missed a STRIP_TEMPLATE when attempting to query whether DECL was
    an imported entity.
    
            PR c++/122628
    
    gcc/cp/ChangeLog:
    
            * module.cc (instantiating_tu_local_entity): Add missing
            STRIP_TEMPLATEs.
    
    gcc/testsuite/ChangeLog:
    
            * g++.dg/modules/internal-18.C: New test.
    
    Signed-off-by: Nathaniel Shead <[email protected]>

Diff:
---
 gcc/cp/module.cc                           | 4 ++--
 gcc/testsuite/g++.dg/modules/internal-18.C | 9 +++++++++
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc
index a52dc0c7850f..da9d29b4b01e 100644
--- a/gcc/cp/module.cc
+++ b/gcc/cp/module.cc
@@ -14231,8 +14231,8 @@ instantiating_tu_local_entity (tree decl)
     return false;
 
   tree origin = get_originating_module_decl (decl);
-  if (!DECL_LANG_SPECIFIC (origin)
-      || !DECL_MODULE_IMPORT_P (origin))
+  if (!DECL_LANG_SPECIFIC (STRIP_TEMPLATE (origin))
+      || !DECL_MODULE_IMPORT_P (STRIP_TEMPLATE (origin)))
     return false;
 
   /* Referencing TU-local entities from a header is generally OK.
diff --git a/gcc/testsuite/g++.dg/modules/internal-18.C 
b/gcc/testsuite/g++.dg/modules/internal-18.C
new file mode 100644
index 000000000000..3f9102a1d477
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/internal-18.C
@@ -0,0 +1,9 @@
+// PR c++/122628
+// { dg-additional-options "-fmodules" }
+
+template <typename T> static void baz(T) {}
+template <typename T> static void bar(T) { baz(0); }
+
+void foo() {
+  bar(0);
+}

Reply via email to