From: Roger Sayle Date: Sun, 19 Jun 2005 16:55:22 +0000 (+0000) Subject: c-decl.c (grokdeclarator): Only check TREE_OVERFLOW on INTEGER_CST nodes. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6414bad6d74db5a12d6dee4124309bb0e823c7fc;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 678b0c52a5f..4d0fbebdc90 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2005-06-19 Roger Sayle + + * 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 * config/ia64/vect.md (vec_extractv2sf_1): Fix cut-and-paste error; diff --git a/gcc/c-decl.c b/gcc/c-decl.c index 8f50b17d1ed..b1260237c98 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -4192,7 +4192,8 @@ grokdeclarator (const struct c_declarator *declarator, index_type, before the subtraction. Handling this case seems like an unnecessary complication. */ - if (TREE_OVERFLOW (itype)) + if (TREE_CODE (itype) == INTEGER_CST + && TREE_OVERFLOW (itype)) { error ("size of array %qs is too large", name); type = error_mark_node; @@ -4357,6 +4358,7 @@ grokdeclarator (const struct c_declarator *declarator, if (TREE_CODE (type) == ARRAY_TYPE && COMPLETE_TYPE_P (type) + && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST && TREE_OVERFLOW (TYPE_SIZE (type))) { error ("size of array %qs is too large", name); diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index 7dcd577f538..988d958e911 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -3331,17 +3331,16 @@ build_c_cast (tree type, tree expr) /* Ignore any integer overflow caused by the cast. */ if (TREE_CODE (value) == INTEGER_CST) { - if (EXPR_P (ovalue)) - /* If OVALUE had overflow set, then so will VALUE, so it - is safe to overwrite. */ - TREE_OVERFLOW (value) = TREE_OVERFLOW (ovalue); + /* If OVALUE had overflow set, then so will VALUE, so it + is safe to overwrite. */ + if (CONSTANT_CLASS_P (ovalue)) + { + TREE_OVERFLOW (value) = TREE_OVERFLOW (ovalue); + /* Similarly, constant_overflow cannot have become cleared. */ + TREE_CONSTANT_OVERFLOW (value) = TREE_CONSTANT_OVERFLOW (ovalue); + } else TREE_OVERFLOW (value) = 0; - - if (CONSTANT_CLASS_P (ovalue)) - /* Similarly, constant_overflow cannot have become - cleared. */ - TREE_CONSTANT_OVERFLOW (value) = TREE_CONSTANT_OVERFLOW (ovalue); } }