Commit 2e1a7ecb by Alexandre Oliva Committed by Alexandre Oliva

[PR c++/84593] ice on braced init with uninit ref field

If an initializer expr is to be NULL in a ctor initializer list, we
ICE in picflag_from_initializer and elsewhere.

If we're missing an initializer for a reference field, we report the
error, but then build a zero initializer to avoid the ICE.

for  gcc/cp/ChangeLog

	PR c++/84593
	* init.c (build_zero_init_1): Zero-initialize references.

for  gcc/testsuite/ChangeLog

	PR c++/84593
	* g++.dg/cpp1y/pr84593.C: New.

From-SVN: r258270
parent 1ea71a82
2018-03-06 Alexandre Oliva <aoliva@redhat.com>
PR c++/84593
* init.c (build_zero_init_1): Zero-initialize references.
PR c++/84492
* semantics.c (finish_stmt_expr_expr): Reject unresolved
overloads used as stmt expr values.
......
......@@ -284,7 +284,10 @@ build_zero_init_1 (tree type, tree nelts, bool static_storage_p,
else if (VECTOR_TYPE_P (type))
init = build_zero_cst (type);
else
{
gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
init = build_zero_cst (type);
}
/* In all cases, the initializer is a constant. */
if (init)
......
2018-03-06 Alexandre Oliva <aoliva@redhat.com>
PR c++/84593
* g++.dg/cpp1y/pr84593.C: New.
PR c++/84492
* g++.dg/pr84492.C: New.
......
// PR c++/84593
// { dg-do compile { target c++14 } }
struct a {
int x;
int c = 0;
int &b;
} c = {}; // { dg-error "uninitialized reference" }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment