Commit 6414bad6 by Roger Sayle Committed by Roger Sayle

c-decl.c (grokdeclarator): Only check TREE_OVERFLOW on INTEGER_CST nodes.


	* c-decl.c (grokdeclarator): Only check TREE_OVERFLOW on
	INTEGER_CST nodes.
	* c-typeck.c (build_c_cast): Only preserve TREE_OVERFLOW on
	CONSTANT_CLASS_P nodes.

From-SVN: r101187
parent e364ab3a
2005-06-19 Roger Sayle <roger@eyesopen.com>
* c-decl.c (grokdeclarator): Only check TREE_OVERFLOW on
INTEGER_CST nodes.
* c-typeck.c (build_c_cast): Only preserve TREE_OVERFLOW on
CONSTANT_CLASS_P nodes.
2005-06-19 Richard Henderson <rth@redhat.com> 2005-06-19 Richard Henderson <rth@redhat.com>
* config/ia64/vect.md (vec_extractv2sf_1): Fix cut-and-paste error; * config/ia64/vect.md (vec_extractv2sf_1): Fix cut-and-paste error;
......
...@@ -4192,7 +4192,8 @@ grokdeclarator (const struct c_declarator *declarator, ...@@ -4192,7 +4192,8 @@ grokdeclarator (const struct c_declarator *declarator,
index_type, before the subtraction. Handling index_type, before the subtraction. Handling
this case seems like an unnecessary this case seems like an unnecessary
complication. */ complication. */
if (TREE_OVERFLOW (itype)) if (TREE_CODE (itype) == INTEGER_CST
&& TREE_OVERFLOW (itype))
{ {
error ("size of array %qs is too large", name); error ("size of array %qs is too large", name);
type = error_mark_node; type = error_mark_node;
...@@ -4357,6 +4358,7 @@ grokdeclarator (const struct c_declarator *declarator, ...@@ -4357,6 +4358,7 @@ grokdeclarator (const struct c_declarator *declarator,
if (TREE_CODE (type) == ARRAY_TYPE if (TREE_CODE (type) == ARRAY_TYPE
&& COMPLETE_TYPE_P (type) && COMPLETE_TYPE_P (type)
&& TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
&& TREE_OVERFLOW (TYPE_SIZE (type))) && TREE_OVERFLOW (TYPE_SIZE (type)))
{ {
error ("size of array %qs is too large", name); error ("size of array %qs is too large", name);
......
...@@ -3331,17 +3331,16 @@ build_c_cast (tree type, tree expr) ...@@ -3331,17 +3331,16 @@ build_c_cast (tree type, tree expr)
/* Ignore any integer overflow caused by the cast. */ /* Ignore any integer overflow caused by the cast. */
if (TREE_CODE (value) == INTEGER_CST) if (TREE_CODE (value) == INTEGER_CST)
{ {
if (EXPR_P (ovalue)) /* If OVALUE had overflow set, then so will VALUE, so it
/* If OVALUE had overflow set, then so will VALUE, so it is safe to overwrite. */
is safe to overwrite. */ if (CONSTANT_CLASS_P (ovalue))
TREE_OVERFLOW (value) = TREE_OVERFLOW (ovalue); {
TREE_OVERFLOW (value) = TREE_OVERFLOW (ovalue);
/* Similarly, constant_overflow cannot have become cleared. */
TREE_CONSTANT_OVERFLOW (value) = TREE_CONSTANT_OVERFLOW (ovalue);
}
else else
TREE_OVERFLOW (value) = 0; TREE_OVERFLOW (value) = 0;
if (CONSTANT_CLASS_P (ovalue))
/* Similarly, constant_overflow cannot have become
cleared. */
TREE_CONSTANT_OVERFLOW (value) = TREE_CONSTANT_OVERFLOW (ovalue);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment