]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
c++/modules: Fix ICE in instantiating_tu_local_entity [PR122628]
authorNathaniel Shead <nathanieloshead@gmail.com>
Mon, 10 Nov 2025 23:16:58 +0000 (10:16 +1100)
committerNathaniel Shead <nathanieloshead@gmail.com>
Mon, 10 Nov 2025 23:16:58 +0000 (10:16 +1100)
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 <nathanieloshead@gmail.com>
gcc/cp/module.cc
gcc/testsuite/g++.dg/modules/internal-18.C [new file with mode: 0644]

index a52dc0c7850f2d10932f391cabde760d0170823d..da9d29b4b01efa8da5c5ff2a1cf10a76dae72ec6 100644 (file)
@@ -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 (file)
index 0000000..3f9102a
--- /dev/null
@@ -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);
+}