pt.c (tsubst_decl): Handle DECL_VALUE_EXPR on reference.
* pt.c (tsubst_decl): Handle DECL_VALUE_EXPR on reference. * decl.c (check_initializer): Handle DECL_VALUE_EXPR_P. From-SVN: r175153
This commit is contained in:
parent
2516ccfe92
commit
f05f61fd73
@ -1,5 +1,8 @@
|
||||
2011-06-17 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* pt.c (tsubst_decl): Handle DECL_VALUE_EXPR on reference.
|
||||
* decl.c (check_initializer): Handle DECL_VALUE_EXPR_P.
|
||||
|
||||
* semantics.c (finish_non_static_data_member): Preserve dereference
|
||||
in template.
|
||||
|
||||
|
@ -5387,6 +5387,14 @@ check_initializer (tree decl, tree init, int flags, tree *cleanup)
|
||||
type. */
|
||||
TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
|
||||
|
||||
if (DECL_HAS_VALUE_EXPR_P (decl))
|
||||
{
|
||||
/* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
|
||||
it doesn't have storage to be initialized. */
|
||||
gcc_assert (init == NULL_TREE);
|
||||
return NULL_TREE;
|
||||
}
|
||||
|
||||
if (type == error_mark_node)
|
||||
/* We will have already complained. */
|
||||
return NULL_TREE;
|
||||
|
@ -10061,6 +10061,11 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain)
|
||||
tree ve = DECL_VALUE_EXPR (t);
|
||||
ve = tsubst_expr (ve, args, complain, in_decl,
|
||||
/*constant_expression_p=*/false);
|
||||
if (REFERENCE_REF_P (ve))
|
||||
{
|
||||
gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
|
||||
ve = TREE_OPERAND (ve, 0);
|
||||
}
|
||||
SET_DECL_VALUE_EXPR (r, ve);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user