semantics.c (cxx_eval_call_expression): Handle trivial value-initialization.
* semantics.c (cxx_eval_call_expression): Handle trivial value-initialization. * typeck2.c (store_init_value): Call maybe_constant_init after cxx_constant_value. From-SVN: r204266
This commit is contained in:
parent
b8aaa1a3b9
commit
c1c2162ead
3 changed files with 17 additions and 6 deletions
|
@ -1,5 +1,10 @@
|
|||
2013-10-31 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* semantics.c (cxx_eval_call_expression): Handle trivial
|
||||
value-initialization.
|
||||
* typeck2.c (store_init_value): Call maybe_constant_init after
|
||||
cxx_constant_value.
|
||||
|
||||
* decl.c (cxx_maybe_build_cleanup): Always set LOOKUP_NONVIRTUAL.
|
||||
* decl2.c (build_cleanup): Just call cxx_maybe_build_cleanup.
|
||||
|
||||
|
|
|
@ -8289,12 +8289,18 @@ cxx_eval_call_expression (const constexpr_call *old_call, tree t,
|
|||
return t;
|
||||
}
|
||||
|
||||
/* Shortcut trivial copy constructor/op=. */
|
||||
if (call_expr_nargs (t) == 2 && trivial_fn_p (fun))
|
||||
/* Shortcut trivial constructor/op=. */
|
||||
if (trivial_fn_p (fun))
|
||||
{
|
||||
tree arg = convert_from_reference (get_nth_callarg (t, 1));
|
||||
return cxx_eval_constant_expression (old_call, arg, allow_non_constant,
|
||||
addr, non_constant_p, overflow_p);
|
||||
if (call_expr_nargs (t) == 2)
|
||||
{
|
||||
tree arg = convert_from_reference (get_nth_callarg (t, 1));
|
||||
return cxx_eval_constant_expression (old_call, arg, allow_non_constant,
|
||||
addr, non_constant_p, overflow_p);
|
||||
}
|
||||
else if (TREE_CODE (t) == AGGR_INIT_EXPR
|
||||
&& AGGR_INIT_ZERO_FIRST (t))
|
||||
return build_zero_init (DECL_CONTEXT (fun), NULL_TREE, false);
|
||||
}
|
||||
|
||||
/* If in direct recursive call, optimize definition search. */
|
||||
|
|
|
@ -775,7 +775,6 @@ store_init_value (tree decl, tree init, vec<tree, va_gc>** cleanups, int flags)
|
|||
{
|
||||
bool const_init;
|
||||
value = fold_non_dependent_expr (value);
|
||||
value = maybe_constant_init (value);
|
||||
if (DECL_DECLARED_CONSTEXPR_P (decl)
|
||||
|| DECL_IN_AGGR_P (decl))
|
||||
{
|
||||
|
@ -786,6 +785,7 @@ store_init_value (tree decl, tree init, vec<tree, va_gc>** cleanups, int flags)
|
|||
else
|
||||
value = cxx_constant_value (value);
|
||||
}
|
||||
value = maybe_constant_init (value);
|
||||
const_init = (reduced_constant_expression_p (value)
|
||||
|| error_operand_p (value));
|
||||
DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = const_init;
|
||||
|
|
Loading…
Add table
Reference in a new issue