diff options
author | Dirk Mueller <dmueller@suse.de> | 2006-05-30 13:43:55 +0000 |
---|---|---|
committer | Dirk Mueller <mueller@gcc.gnu.org> | 2006-05-30 13:43:55 +0000 |
commit | d117b270e2cb7841dd739a514fe8fac48f2225dd (patch) | |
tree | aed5afaffb08157dad84f9a375f9a7f918adea9c /gcc/c-common.c | |
parent | 16464cc1bba0fd0befabcb90bad7d28b3e229c93 (diff) | |
download | gcc-d117b270e2cb7841dd739a514fe8fac48f2225dd.zip gcc-d117b270e2cb7841dd739a514fe8fac48f2225dd.tar.gz gcc-d117b270e2cb7841dd739a514fe8fac48f2225dd.tar.bz2 |
re PR c/27273 (tree check fail for legal code when convert returns a constant from an expression that was not constant)
PR c/27273
* c-common.c (convert_and_check): only track TREE_CONSTANT_OVERFLOW
for CONSTANT_CLASS_P expressions.
* gcc.dg/overflow-warn-5.c: New testcase.
From-SVN: r114238
Diffstat (limited to 'gcc/c-common.c')
-rw-r--r-- | gcc/c-common.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/c-common.c b/gcc/c-common.c index a27f5d3..dea8389 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -1083,7 +1083,8 @@ convert_and_check (tree type, tree expr) /* Do not diagnose overflow in a constant expression merely because a conversion overflowed. */ - TREE_CONSTANT_OVERFLOW (t) = TREE_CONSTANT_OVERFLOW (expr); + TREE_CONSTANT_OVERFLOW (t) = CONSTANT_CLASS_P (expr) + && TREE_CONSTANT_OVERFLOW (expr); /* No warning for converting 0x80000000 to int. */ if (!(TYPE_UNSIGNED (type) < TYPE_UNSIGNED (TREE_TYPE (expr)) |