Commit ec3ebf45 by Olivier Goffart Committed by Jason Merrill

re PR c++/50965 (C++11 Non static member initializer are not run when class is initialized with {})

	PR c++/50965
	* class.c (check_field_decls): NSDMI makes a class non-aggregate.

Co-Authored-By: Jason Merrill <jason@redhat.com>

From-SVN: r180965
parent e98925f6
2011-11-04 Olivier Goffart <olivier@woboq.com>
Jason Merrill <jason@redhat.com>
PR c++/50965
* class.c (check_field_decls): NSDMI makes a class non-aggregate.
2011-11-04 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/48420
......
......@@ -3189,6 +3189,12 @@ check_field_decls (tree t, tree *access_decls,
no_const_asn_ref_p,
&any_default_members);
/* Now that we've removed bit-field widths from DECL_INITIAL,
anything left in DECL_INITIAL is an NSDMI that makes the class
non-aggregate. */
if (DECL_INITIAL (x))
CLASSTYPE_NON_AGGREGATE (t) = true;
/* If any field is const, the structure type is pseudo-const. */
if (CP_TYPE_CONST_P (type))
{
......
......@@ -3205,8 +3205,9 @@ more_aggr_init_expr_args_p (const aggr_init_expr_arg_iterator *iter)
/* [dcl.init.aggr]
An aggregate is an array or a class with no user-declared
constructors, no private or protected non-static data members, no
An aggregate is an array or a class with no user-provided
constructors, no brace-or-equal-initializers for non-static data
members, no private or protected non-static data members, no
base classes, and no virtual functions.
As an extension, we also treat vectors as aggregates. Keep these
......
2011-11-04 Olivier Goffart <olivier@woboq.com>
PR c++/50965
* g++.dg/cpp0x/nsdmi1.C: Add more cases.
2011-11-04 Jiangning Liu <jiangning.liu@arm.com>
PR rtl-optimization/38644
......
......@@ -31,8 +31,8 @@ int main()
{
A a1;
if (a1.i != 42) return 1;
A a2 = { 24 };
if (a2.i != 24) return 2;
A a2{};
if (a2.i != 42) return 2;
A a3[1];
if (a3[0].i != 42) return 3;
......@@ -43,7 +43,7 @@ int main()
C<int,3> c1;
if (c1.m != 3) return 5;
C<int,3> c2 { 5 };
C<int,5> c2 {};
if (c2.m != 5) return 6;
D<int,3> d1;
......
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