diff options
author | Jason Merrill <jason@redhat.com> | 2016-10-04 21:24:38 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2016-10-04 21:24:38 -0400 |
commit | f1644724b57aa559f71a22402b3eeb776be106e5 (patch) | |
tree | 52c454f1c5de6d7762449bf5b461ac803afb4a43 /gcc/c-family | |
parent | 1c84b79889a10503e5adf0e78d0509a88ca08868 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/c-family/c-common.c | 12 | ||||
-rw-r--r-- | gcc/c-family/c-common.h | 1 |
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 |