8sa1-gcc/gcc/testsuite/g++.dg/cpp0x/constexpr-array15.C
Jason Merrill ca30abcd13 re PR c++/68949 (Implicit initialization of array member silently miscompiling.)
PR c++/68949

	* constexpr.c (register_constexpr_fundef): Keep the un-massaged body.
	(cxx_eval_call_expression): Don't look through clones.
	* optimize.c (maybe_clone_body): Clear DECL_SAVED_TREE of the alias.
	* semantics.c (expand_or_defer_fn_1): Keep DECL_SAVED_TREE of
	maybe-in-charge *tor.

From-SVN: r232848
2016-01-26 16:34:16 -05:00

30 lines
730 B
C

// PR c++/68949
// { dg-do run { target c++11 } }
struct Sub {
int i;
constexpr Sub() : i(-1) {} // remove constexpr and it works as expected
Sub(Sub&& rhs); // remove this constructor and it works as epxected.
};
// v-- move this inline and it works as expected
// v-- remove ': Sub()' and it works as expected
Sub::Sub(Sub&& rhs) : Sub() { int tmp = i; i = rhs.i; rhs.i = tmp; }
struct Class {
// v-- remove '[1]' and it works as expected
// v-- add '= {}' and it works as expected
Sub s[1];
// v-- add ': s{}' and it works as expected
// v-- removing this constructor makes it work as expected
Class() {}
};
int main() {
Class c;
if (c.s[0].i != -1)
__builtin_abort();
}