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
30 lines
730 B
C
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();
|
|
}
|