From: Alexandre Oliva Date: Tue, 6 Mar 2018 06:24:53 +0000 (+0000) Subject: [PR c++/84593] ice on braced init with uninit ref field X-Git-Tag: upstream/12.2.0~33023 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2e1a7ecb2d8f1ee3f88fd2906ab16eb30ab525f7;p=platform%2Fupstream%2Fgcc.git [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 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index cbacda6..3623405 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2018-03-06 Alexandre Oliva + 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. diff --git a/gcc/cp/init.c b/gcc/cp/init.c index d0d14ab..15cee17 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -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); + { + gcc_assert (TREE_CODE (type) == REFERENCE_TYPE); + init = build_zero_cst (type); + } /* In all cases, the initializer is a constant. */ if (init) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e3e3262..9c94d36 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2018-03-06 Alexandre Oliva + PR c++/84593 + * g++.dg/cpp1y/pr84593.C: New. + PR c++/84492 * g++.dg/pr84492.C: New. diff --git a/gcc/testsuite/g++.dg/cpp1y/pr84593.C b/gcc/testsuite/g++.dg/cpp1y/pr84593.C new file mode 100644 index 0000000..8aa869f --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/pr84593.C @@ -0,0 +1,8 @@ +// PR c++/84593 +// { dg-do compile { target c++14 } } + +struct a { + int x; + int c = 0; + int &b; +} c = {}; // { dg-error "uninitialized reference" }