diff mbox series

[pushed] c++: Fix ICE with omitted template args [PR93956].

Message ID 20200311015913.20762-1-jason@redhat.com
State New
Headers show
Series [pushed] c++: Fix ICE with omitted template args [PR93956]. | expand

Commit Message

Li, Pan2 via Gcc-patches March 11, 2020, 1:59 a.m. UTC
reshape_init only wants to work on BRACE_ENCLOSED_INITIALIZER_P, i.e. raw
initializer lists, and here was getting a CONSTRUCTOR that had already been
processed for type A<int>.  maybe_aggr_guide should also use that test.

Tested x86_64-pc-linux-gnu, applying to trunk.

gcc/cp/ChangeLog
2020-03-10  Jason Merrill  <jason@redhat.com>

	PR c++/93956
	* pt.c (maybe_aggr_guide): Check BRACE_ENCLOSED_INITIALIZER_P.
---
 gcc/cp/pt.c                                    | 2 +-
 gcc/testsuite/g++.dg/cpp1z/class-deduction70.C | 7 +++++++
 2 files changed, 8 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/g++.dg/cpp1z/class-deduction70.C


base-commit: b269a014771776f860730874095dffb34839a466
diff mbox series

Patch

diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 49ee3920049..179716b5680 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -28182,7 +28182,7 @@  maybe_aggr_guide (tree tmpl, tree init, vec<tree,va_gc> *args)
   tsubst_flags_t complain = tf_none;
 
   tree parms = NULL_TREE;
-  if (TREE_CODE (init) == CONSTRUCTOR)
+  if (BRACE_ENCLOSED_INITIALIZER_P (init))
     {
       init = reshape_init (type, init, complain);
       if (init == error_mark_node)
diff --git a/gcc/testsuite/g++.dg/cpp1z/class-deduction70.C b/gcc/testsuite/g++.dg/cpp1z/class-deduction70.C
new file mode 100644
index 00000000000..f14bdf0b8ec
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1z/class-deduction70.C
@@ -0,0 +1,7 @@ 
+// PR c++/93596
+
+template <typename> struct A {};
+template <typename> struct B {};
+template <typename> struct C {
+  void foo () { B a = A<int> { foo }; } // { dg-error "" }
+};