diff options
author | Roger Sayle <roger@eyesopen.com> | 2005-06-19 16:55:22 +0000 |
---|---|---|
committer | Roger Sayle <sayle@gcc.gnu.org> | 2005-06-19 16:55:22 +0000 |
commit | 6414bad6d74db5a12d6dee4124309bb0e823c7fc (patch) | |
tree | 4115c5e8551c3d8c8c3f4e3245384e64b6e75c67 /gcc | |
parent | e364ab3ab7e21141218956a59dba88f04c34f8b9 (diff) | |
download | gcc-6414bad6d74db5a12d6dee4124309bb0e823c7fc.zip gcc-6414bad6d74db5a12d6dee4124309bb0e823c7fc.tar.gz gcc-6414bad6d74db5a12d6dee4124309bb0e823c7fc.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/c-decl.c | 4 | ||||
-rw-r--r-- | gcc/c-typeck.c | 17 |
3 files changed, 18 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 678b0c5..4d0fbeb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +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> * 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 8f50b17..b126023 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 7dcd577..988d958 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); } } |