diff options
author | Jason Merrill <jason@redhat.com> | 2018-11-05 02:46:57 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2018-11-05 02:46:57 -0500 |
commit | 5dab8b11c41fe72ea606c38884f7730bd2aeafdc (patch) | |
tree | 93c5972f6c8b0ac891b9a3d2e0afdc8eda67bf8e /gcc/cp/tree.c | |
parent | c24c8a4b003f81734c2a94e0980008c2c24659d9 (diff) | |
download | gcc-5dab8b11c41fe72ea606c38884f7730bd2aeafdc.zip gcc-5dab8b11c41fe72ea606c38884f7730bd2aeafdc.tar.gz gcc-5dab8b11c41fe72ea606c38884f7730bd2aeafdc.tar.bz2 |
Fix various latent issues revealed by P0732 work.
The initialized_type hunk fixes handling of void AGGR_INIT_EXPRs that call a
non-constructor; an AGGR_INIT_EXPR can have void type if its initialization
semantics are more complicated than just expanding the call.
The cxx_eval_vec_init_1 hunk corrects AGGR_INIT_EXPRs that were
nonsensically built to initialize an object of void type. And the
build_aggr_init_expr hunk makes sure we don't do that again.
The ocp_convert and cxx_eval_outermost_constant_expr hunks deal with making
sure that a constant CONSTRUCTOR has the right type.
* cvt.c (ocp_convert): Don't wrap a CONSTRUCTOR in a NOP_EXPR.
* constexpr.c (initialized_type): Fix AGGR_INIT_EXPR handling.
(cxx_eval_vec_init_1): Correct type of AGGR_INIT_EXPR.
(cxx_eval_outermost_constant_expr): Make sure a CONSTRUCTOR has the
right type. Don't wrap a CONSTRUCTOR if one was passed in.
* tree.c (build_aggr_init_expr): Check for void.
From-SVN: r265788
Diffstat (limited to 'gcc/cp/tree.c')
-rw-r--r-- | gcc/cp/tree.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 74018e9..51af9f2 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -576,6 +576,8 @@ build_aggr_init_expr (tree type, tree init) tree rval; int is_ctor; + gcc_assert (!VOID_TYPE_P (type)); + /* Don't build AGGR_INIT_EXPR in a template. */ if (processing_template_decl) return init; |