diff options
author | Richard Guenther <rguenther@suse.de> | 2007-10-05 16:33:25 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2007-10-05 16:33:25 +0000 |
commit | 6aa12f4ffb5d7156e36ccceece6b8a8a83ae520f (patch) | |
tree | 7e671b5aaa5937f432deacc82380c31465101592 /gcc/fold-const.c | |
parent | 1596d61e6efe75dd6fdf2b23d6028f1431143ccb (diff) | |
download | gcc-6aa12f4ffb5d7156e36ccceece6b8a8a83ae520f.zip gcc-6aa12f4ffb5d7156e36ccceece6b8a8a83ae520f.tar.gz gcc-6aa12f4ffb5d7156e36ccceece6b8a8a83ae520f.tar.bz2 |
re PR middle-end/33666 (Type verification failure with pointer to long long conversion)
2007-10-05 Richard Guenther <rguenther@suse.de>
PR middle-end/33666
* fold-const.c (fold_unary): Do not fold (long long)(int)ptr
to (long long)ptr.
* gcc.dg/pr33666.c: New testcase.
From-SVN: r129036
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r-- | gcc/fold-const.c | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 62cbfd1..46e0e33 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -8128,7 +8128,7 @@ fold_unary (enum tree_code code, tree type, tree op0) (for integers). Avoid this if the final type is a pointer since then we sometimes need the inner conversion. Likewise if the outer has a precision not equal to the size of its mode. */ - if ((((inter_int || inter_ptr) && (inside_int || inside_ptr)) + if (((inter_int && inside_int) || (inter_float && inside_float) || (inter_vec && inside_vec)) && inter_prec >= inside_prec @@ -8158,7 +8158,6 @@ fold_unary (enum tree_code code, tree type, tree op0) intermediate and final types differ, or - the final type is a pointer type and the precisions of the initial and intermediate types differ. - - the final type is a pointer type and the initial type not - the initial type is a pointer to an array and the final type not. */ if (! inside_float && ! inter_float && ! final_float @@ -8173,8 +8172,7 @@ fold_unary (enum tree_code code, tree type, tree op0) && ! (final_ptr && inside_prec != inter_prec) && ! (final_prec != GET_MODE_BITSIZE (TYPE_MODE (type)) && TYPE_MODE (type) == TYPE_MODE (inter_type)) - && final_ptr == inside_ptr - && ! (inside_ptr + && ! (inside_ptr && final_ptr && TREE_CODE (TREE_TYPE (inside_type)) == ARRAY_TYPE && TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE)) return fold_build1 (code, type, TREE_OPERAND (op0, 0)); |