diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2018-04-05 17:08:21 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2018-04-05 17:08:21 +0000 |
commit | 61f84e25f6cbfb182bfaa4334d44f3c865c4c0b7 (patch) | |
tree | 902ce68a79ce3d3656c8f1e62d00ec1dd824c360 /gcc/cp/call.c | |
parent | 3b4a12aa8a7c7298c0b6277dad82e1dd95857eb8 (diff) | |
download | gcc-61f84e25f6cbfb182bfaa4334d44f3c865c4c0b7.zip gcc-61f84e25f6cbfb182bfaa4334d44f3c865c4c0b7.tar.gz gcc-61f84e25f6cbfb182bfaa4334d44f3c865c4c0b7.tar.bz2 |
re PR c++/80956 (ICE with abstract class vector)
/cp
2018-04-05 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/80956
* call.c (convert_like_real): Fail gracefully for a broken
std::initializer_list, missing a definition.
* name-lookup.c (do_pushtag): Tweak message, use %< and %>.
/testsuite
2018-04-05 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/80956
* g++.dg/cpp0x/initlist100.C: New.
* g++.dg/cpp0x/initlist101.C: Likewise.
From-SVN: r259137
Diffstat (limited to 'gcc/cp/call.c')
-rw-r--r-- | gcc/cp/call.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/gcc/cp/call.c b/gcc/cp/call.c index f2ada27..b22a3cc 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -6880,8 +6880,12 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum, if (array == error_mark_node) return error_mark_node; - /* Build up the initializer_list object. */ - totype = complete_type (totype); + /* Build up the initializer_list object. Note: fail gracefully + if the object cannot be completed because, for example, no + definition is provided (c++/80956). */ + totype = complete_type_or_maybe_complain (totype, NULL_TREE, complain); + if (!totype) + return error_mark_node; field = next_initializable_field (TYPE_FIELDS (totype)); CONSTRUCTOR_APPEND_ELT (vec, field, array); field = next_initializable_field (DECL_CHAIN (field)); |