aboutsummaryrefslogtreecommitdiff
path: root/gcc/c-family
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2016-10-04 21:24:38 -0400
committerJason Merrill <jason@gcc.gnu.org>2016-10-04 21:24:38 -0400
commitf1644724b57aa559f71a22402b3eeb776be106e5 (patch)
tree52c454f1c5de6d7762449bf5b461ac803afb4a43 /gcc/c-family
parent1c84b79889a10503e5adf0e78d0509a88ca08868 (diff)
downloadgcc-f1644724b57aa559f71a22402b3eeb776be106e5.zip
gcc-f1644724b57aa559f71a22402b3eeb776be106e5.tar.gz
gcc-f1644724b57aa559f71a22402b3eeb776be106e5.tar.bz2
PR c++/77852 - class deduction from list-init
* pt.c (do_class_deduction): Handle list-initialization. (do_auto_deduction): Call it sooner. (build_deduction_guide): Use tsubst_arg_types. (rewrite_template_parm): Don't copy_type. From-SVN: r240765
Diffstat (limited to 'gcc/c-family')
-rw-r--r--gcc/c-family/ChangeLog5
-rw-r--r--gcc/c-family/c-common.c12
-rw-r--r--gcc/c-family/c-common.h1
3 files changed, 18 insertions, 0 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index d39e036..1a16c6a 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,8 @@
+2016-10-04 Jason Merrill <jason@redhat.com>
+
+ * c-common.c (make_tree_vector_from_ctor): New.
+ * c-common.h: Declare it.
+
2016-10-04 Jakub Jelinek <jakub@redhat.com>
* c-cppbuiltin.c (c_cpp_builtins): Don't define
diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c
index 491c637..2fce793 100644
--- a/gcc/c-family/c-common.c
+++ b/gcc/c-family/c-common.c
@@ -12612,6 +12612,18 @@ make_tree_vector_from_list (tree list)
return ret;
}
+/* Get a new tree vector of the values of a CONSTRUCTOR. */
+
+vec<tree, va_gc> *
+make_tree_vector_from_ctor (tree ctor)
+{
+ vec<tree,va_gc> *ret = make_tree_vector ();
+ vec_safe_reserve (ret, CONSTRUCTOR_NELTS (ctor));
+ for (unsigned i = 0; i < CONSTRUCTOR_NELTS (ctor); ++i)
+ ret->quick_push (CONSTRUCTOR_ELT (ctor, i)->value);
+ return ret;
+}
+
/* Get a new tree vector which is a copy of an existing one. */
vec<tree, va_gc> *
diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h
index c88619b..28aebec 100644
--- a/gcc/c-family/c-common.h
+++ b/gcc/c-family/c-common.h
@@ -1111,6 +1111,7 @@ extern vec<tree, va_gc> *make_tree_vector (void);
extern void release_tree_vector (vec<tree, va_gc> *);
extern vec<tree, va_gc> *make_tree_vector_single (tree);
extern vec<tree, va_gc> *make_tree_vector_from_list (tree);
+extern vec<tree, va_gc> *make_tree_vector_from_ctor (tree);
extern vec<tree, va_gc> *make_tree_vector_copy (const vec<tree, va_gc> *);
/* Used for communication between c_common_type_for_mode and