diff options
author | Jakub Jelinek <jakub@redhat.com> | 2001-02-12 09:34:30 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2001-02-12 09:34:30 +0100 |
commit | d02b54f66dac63bbd4bc7c5b44f2b9f6459d81dd (patch) | |
tree | 0b7df8968036ccd7157ea67cb1f4b25c98fab59a /gcc | |
parent | b1012f1b4ca901ced4d2ff3ccbb64887cbf42381 (diff) | |
download | gcc-d02b54f66dac63bbd4bc7c5b44f2b9f6459d81dd.zip gcc-d02b54f66dac63bbd4bc7c5b44f2b9f6459d81dd.tar.gz gcc-d02b54f66dac63bbd4bc7c5b44f2b9f6459d81dd.tar.bz2 |
c-common.c (constant_fits_type_p): New function.
* c-common.c (constant_fits_type_p): New function.
(convert_and_check): Use it.
* gcc.c-torture/compile/20010209-1.c: New test.
From-SVN: r39596
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/c-common.c | 17 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/20010209-1.c | 7 |
4 files changed, 32 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index acab701..fbaa4c6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-02-12 Jakub Jelinek <jakub@redhat.com> + + * c-common.c (constant_fits_type_p): New function. + (convert_and_check): Use it. + 2001-02-11 Mark Mitchell <mark@codesourcery.com> * Makefile.in (GXX_ABI_FLAG): Don't define. diff --git a/gcc/c-common.c b/gcc/c-common.c index dfa5813..5d3510c 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -232,6 +232,7 @@ static void add_attribute PARAMS ((enum attrs, const char *, int, int, int)); static void init_attributes PARAMS ((void)); static int default_valid_lang_attribute PARAMS ((tree, tree, tree, tree)); +static int constant_fits_type_p PARAMS ((tree, tree)); /* Keep a stack of if statements. We record the number of compound statements seen up to the if keyword, as well as the line number @@ -1189,6 +1190,20 @@ unsigned_conversion_warning (result, operand) } } +/* Nonzero if constant C has a value that is permissible + for type TYPE (an INTEGER_TYPE). */ + +static int +constant_fits_type_p (c, type) + tree c, type; +{ + if (TREE_CODE (c) == INTEGER_CST) + return int_fits_type_p (c, type); + + c = convert (type, c); + return !TREE_OVERFLOW (c); +} + /* Convert EXPR to TYPE, warning about conversion problems with constants. Invoke this function on every expression that is converted implicitly, i.e. because of language rules and not because of an explicit cast. */ @@ -1216,7 +1231,7 @@ convert_and_check (type, expr) don't warn unless pedantic. */ if ((pedantic || TREE_UNSIGNED (type) - || ! int_fits_type_p (expr, unsigned_type (type))) + || ! constant_fits_type_p (expr, unsigned_type (type))) && skip_evaluation == 0) warning ("overflow in implicit constant conversion"); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d17e44b..c883278 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2001-02-12 Jakub Jelinek <jakub@redhat.com> + + * gcc.c-torture/compile/20010209-1.c: New test. + 2001-02-11 Jeffrey Oldham <oldham@codesourcery.com> * g++.old-deja/g++.other/crash26.C: XFAIL if parser produces diff --git a/gcc/testsuite/gcc.c-torture/compile/20010209-1.c b/gcc/testsuite/gcc.c-torture/compile/20010209-1.c new file mode 100644 index 0000000..2043464 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20010209-1.c @@ -0,0 +1,7 @@ +short int a; + +int main (void) +{ + a = 65535.0; + return 0; +} |