aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-06-24 17:46:59 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1994-06-24 17:46:59 -0400
commit8c3a64777060b6617168ef32c0b05c2ca8aafe16 (patch)
treefd02611fe7af342460422f43db0541ae37801c30 /gcc
parent289871f06fe076aec1257cb1f13d33a0a30dcaa7 (diff)
downloadgcc-8c3a64777060b6617168ef32c0b05c2ca8aafe16.zip
gcc-8c3a64777060b6617168ef32c0b05c2ca8aafe16.tar.gz
gcc-8c3a64777060b6617168ef32c0b05c2ca8aafe16.tar.bz2
(decl_constant_value): Test for const and not iterator.
(default_conversion, digest_init): Remove redundant checks before calling decl_constant_value. (convert_for_assignment): See if RHS has a constant value. From-SVN: r7565
Diffstat (limited to 'gcc')
-rw-r--r--gcc/c-typeck.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c
index 80c236f..96a0a0a 100644
--- a/gcc/c-typeck.c
+++ b/gcc/c-typeck.c
@@ -961,6 +961,7 @@ decl_constant_value (decl)
&& current_function_decl != 0
&& ! pedantic
&& ! TREE_THIS_VOLATILE (decl)
+ && TREE_READONLY (decl) && ! ITERATOR_P (decl)
&& DECL_INITIAL (decl) != 0
&& TREE_CODE (DECL_INITIAL (decl)) != ERROR_MARK
/* This is invalid if initial value is not constant.
@@ -990,12 +991,7 @@ default_conversion (exp)
if (TREE_CODE (exp) == CONST_DECL)
exp = DECL_INITIAL (exp);
/* Replace a nonvolatile const static variable with its value. */
- else if (optimize
- && TREE_CODE (exp) == VAR_DECL
- && TREE_READONLY (exp)
- /* But not for iterators! */
- && !ITERATOR_P (exp)
- && DECL_MODE (exp) != BLKmode)
+ else if (optimize && TREE_CODE (exp) == VAR_DECL)
{
exp = decl_constant_value (exp);
type = TREE_TYPE (exp);
@@ -3846,6 +3842,8 @@ convert_for_assignment (type, rhs, errtype, fundecl, funname, parmnum)
if (TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE
|| TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE)
rhs = default_conversion (rhs);
+ else if (optimize && TREE_CODE (rhs) == VAR_DECL)
+ rhs = decl_constant_value (rhs);
rhstype = TREE_TYPE (rhs);
coder = TREE_CODE (rhstype);
@@ -4664,8 +4662,7 @@ digest_init (type, init, require_constant, constructor_constant)
return error_mark_node;
}
- if (optimize && TREE_READONLY (inside_init)
- && TREE_CODE (inside_init) == VAR_DECL)
+ if (optimize && TREE_CODE (inside_init) == VAR_DECL)
inside_init = decl_constant_value (inside_init);
/* Compound expressions can only occur here if -pedantic or