diff options
author | Jason Merrill <jason@redhat.com> | 2011-08-23 12:03:35 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2011-08-23 12:03:35 -0400 |
commit | 30fdd4f2bf86abb827cd82c25723cd08acb9fb26 (patch) | |
tree | 124ed77e9879ebf7a7a6df23a9d61c95464a70a5 /gcc | |
parent | 27bec7bf4afb31eac4a79857ffe7aab3d9182e87 (diff) | |
download | gcc-30fdd4f2bf86abb827cd82c25723cd08acb9fb26.zip gcc-30fdd4f2bf86abb827cd82c25723cd08acb9fb26.tar.gz gcc-30fdd4f2bf86abb827cd82c25723cd08acb9fb26.tar.bz2 |
tree.c (build_target_expr): Set TREE_CONSTANT on literal TARGET_EXPR if the value is constant.
* tree.c (build_target_expr): Set TREE_CONSTANT on
literal TARGET_EXPR if the value is constant.
* typeck2.c (build_functional_cast): Don't set it here.
From-SVN: r177997
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/tree.c | 5 | ||||
-rw-r--r-- | gcc/cp/typeck2.c | 3 |
3 files changed, 10 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index bbada45..23a63ce 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,11 @@ 2011-08-23 Jason Merrill <jason@redhat.com> + * tree.c (build_target_expr): Set TREE_CONSTANT on + literal TARGET_EXPR if the value is constant. + * typeck2.c (build_functional_cast): Don't set it here. + +2011-08-23 Jason Merrill <jason@redhat.com> + Core 903 (partial) * call.c (null_ptr_cst_p): Only 0 qualifies in C++11. diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 4ef89c4..00598ce 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -288,6 +288,7 @@ static tree build_target_expr (tree decl, tree value, tsubst_flags_t complain) { tree t; + tree type = TREE_TYPE (decl); #ifdef ENABLE_CHECKING gcc_assert (VOID_TYPE_P (TREE_TYPE (value)) @@ -302,12 +303,14 @@ build_target_expr (tree decl, tree value, tsubst_flags_t complain) t = cxx_maybe_build_cleanup (decl, complain); if (t == error_mark_node) return error_mark_node; - t = build4 (TARGET_EXPR, TREE_TYPE (decl), decl, value, t, NULL_TREE); + t = build4 (TARGET_EXPR, type, decl, value, t, NULL_TREE); /* We always set TREE_SIDE_EFFECTS so that expand_expr does not ignore the TARGET_EXPR. If there really turn out to be no side-effects, then the optimizer should be able to get rid of whatever code is generated anyhow. */ TREE_SIDE_EFFECTS (t) = 1; + if (literal_type_p (type)) + TREE_CONSTANT (t) = TREE_CONSTANT (value); return t; } diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c index 79aa354..97f98ab 100644 --- a/gcc/cp/typeck2.c +++ b/gcc/cp/typeck2.c @@ -1684,9 +1684,6 @@ build_functional_cast (tree exp, tree parms, tsubst_flags_t complain) { exp = build_value_init (type, complain); exp = get_target_expr_sfinae (exp, complain); - /* FIXME this is wrong */ - if (literal_type_p (type)) - TREE_CONSTANT (exp) = true; return exp; } |