public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r14-6415] c++: alias CTAD and specializations table
@ 2023-12-11 14:48 Patrick Palka
  0 siblings, 0 replies; only message in thread
From: Patrick Palka @ 2023-12-11 14:48 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:f5aa23f7f633313039c840ab36695a38efbb1a99

commit r14-6415-gf5aa23f7f633313039c840ab36695a38efbb1a99
Author: Patrick Palka <ppalka@redhat.com>
Date:   Mon Dec 11 09:48:04 2023 -0500

    c++: alias CTAD and specializations table
    
    A rewritten guide for alias CTAD isn't really a specialization of the
    original guide, so we shouldn't register it as such.  This avoids an ICE
    in the below modules testcase for which we otherwise crash due to the
    guide's empty DECL_CONTEXT when walking the specializations table.  It
    also preemptively avoids the same ICE in modules/concept-6 in C++23 mode
    with the inherited CTAD patch.
    
    gcc/cp/ChangeLog:
    
            * pt.cc (alias_ctad_tweaks): Pass use_spec_table=false to
            tsubst_decl.
    
    gcc/testsuite/ChangeLog:
    
            * g++.dg/modules/concept-8.h: New test.
            * g++.dg/modules/concept-8_a.H: New test.
            * g++.dg/modules/concept-8_b.C: New test.

Diff:
---
 gcc/cp/pt.cc                               |  3 ++-
 gcc/testsuite/g++.dg/modules/concept-8.h   | 14 ++++++++++++++
 gcc/testsuite/g++.dg/modules/concept-8_a.H |  5 +++++
 gcc/testsuite/g++.dg/modules/concept-8_b.C |  8 ++++++++
 4 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc
index e9dcdb32c6c..208fa21032e 100644
--- a/gcc/cp/pt.cc
+++ b/gcc/cp/pt.cc
@@ -30020,7 +30020,8 @@ alias_ctad_tweaks (tree tmpl, tree uguides)
 	      /* Parms are to have DECL_CHAIN tsubsted, which would be skipped
 		 if cp_unevaluated_operand.  */
 	      cp_evaluated ev;
-	      g = tsubst_decl (DECL_TEMPLATE_RESULT (f), targs, complain);
+	      g = tsubst_decl (DECL_TEMPLATE_RESULT (f), targs, complain,
+			       /*use_spec_table=*/false);
 	    }
 	  if (g == error_mark_node)
 	    continue;
diff --git a/gcc/testsuite/g++.dg/modules/concept-8.h b/gcc/testsuite/g++.dg/modules/concept-8.h
new file mode 100644
index 00000000000..a25f9b752fd
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/concept-8.h
@@ -0,0 +1,14 @@
+// A version of concept-6.h using an alias template + alias CTAD
+
+template<typename _Callable>
+struct Base
+{
+  Base (const _Callable &)
+    requires true
+  {}
+};
+
+template<typename _Callable> requires true
+using Derived = Base<_Callable>;
+
+inline Derived all = [] (auto&& __r) {};
diff --git a/gcc/testsuite/g++.dg/modules/concept-8_a.H b/gcc/testsuite/g++.dg/modules/concept-8_a.H
new file mode 100644
index 00000000000..da0467781c1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/concept-8_a.H
@@ -0,0 +1,5 @@
+// { dg-require-effective-target c++20 }
+// { dg-additional-options "-fmodule-header -fconcepts" }
+// { dg-module-cmi {} }
+
+#include "concept-8.h"
diff --git a/gcc/testsuite/g++.dg/modules/concept-8_b.C b/gcc/testsuite/g++.dg/modules/concept-8_b.C
new file mode 100644
index 00000000000..9a9f014ee09
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/concept-8_b.C
@@ -0,0 +1,8 @@
+// { dg-require-effective-target c++20 }
+// { dg-additional-options "-fmodules-ts -fconcepts -fdump-lang-module-alias -fno-module-lazy" }
+
+#include "concept-8.h"
+import "concept-8_a.H";
+
+// { dg-final { scan-lang-dump-times {named merge key \(matched\) function_decl:'::Base<::._anon_0>::__ct '} 2 module } }
+// { dg-final { scan-lang-dump-not {merge key \(new\)} module } }

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-12-11 14:48 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-12-11 14:48 [gcc r14-6415] c++: alias CTAD and specializations table Patrick Palka

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).