mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-21 15:41:09 +08:00
re PR middle-end/49189 (infinite recursion in constant folder)
2011-05-27 Richard Guenther <rguenther@suse.de> PR middle-end/49189 * fold-const.c (fold_unary_loc): Do not re-fold folding conversions of comparisons. * gnat.dg/bit_packed_array5.adb: New testcase. * gnat.dg/bit_packed_array5.ads: Likewise. From-SVN: r174330
This commit is contained in:
parent
a95b23b429
commit
c2299dfe53
@ -1,3 +1,9 @@
|
||||
2011-05-27 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR middle-end/49189
|
||||
* fold-const.c (fold_unary_loc): Do not re-fold folding conversions
|
||||
of comparisons.
|
||||
|
||||
2011-05-27 Bernd Schmidt <bernds@codesourcery.com>
|
||||
|
||||
* haifa-sched.c (sched_scan_info): Remove.
|
||||
|
@ -7660,15 +7660,19 @@ fold_unary_loc (location_t loc, enum tree_code code, tree type, tree op0)
|
||||
if (COMPARISON_CLASS_P (op0))
|
||||
{
|
||||
/* If we have (type) (a CMP b) and type is an integral type, return
|
||||
new expression involving the new type. */
|
||||
new expression involving the new type. Canonicalize
|
||||
(type) (a CMP b) to (a CMP b) ? (type) true : (type) false for
|
||||
non-integral type.
|
||||
Do not fold the result as that would not simplify further, also
|
||||
folding again results in recursions. */
|
||||
if (INTEGRAL_TYPE_P (type))
|
||||
return fold_build2_loc (loc, TREE_CODE (op0), type,
|
||||
TREE_OPERAND (op0, 0),
|
||||
TREE_OPERAND (op0, 1));
|
||||
return build2_loc (loc, TREE_CODE (op0), type,
|
||||
TREE_OPERAND (op0, 0),
|
||||
TREE_OPERAND (op0, 1));
|
||||
else
|
||||
return fold_build3_loc (loc, COND_EXPR, type, op0,
|
||||
fold_convert (type, boolean_true_node),
|
||||
fold_convert (type, boolean_false_node));
|
||||
return build3_loc (loc, COND_EXPR, type, op0,
|
||||
fold_convert (type, boolean_true_node),
|
||||
fold_convert (type, boolean_false_node));
|
||||
}
|
||||
|
||||
/* Handle cases of two conversions in a row. */
|
||||
|
@ -1,3 +1,9 @@
|
||||
2011-05-27 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR middle-end/49189
|
||||
* gnat.dg/bit_packed_array5.adb: New testcase.
|
||||
* gnat.dg/bit_packed_array5.ads: Likewise.
|
||||
|
||||
2011-05-26 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* g++.dg/cpp0x/friend1.C: New.
|
||||
|
21
gcc/testsuite/gnat.dg/bit_packed_array5.adb
Normal file
21
gcc/testsuite/gnat.dg/bit_packed_array5.adb
Normal file
@ -0,0 +1,21 @@
|
||||
with System;
|
||||
|
||||
package body Bit_Packed_Array5 is
|
||||
|
||||
function Inv (Word : Word_Type) return Word_Type is
|
||||
W : Word_Type := Word;
|
||||
pragma Volatile (W);
|
||||
|
||||
A_W : constant System.Address := W'Address;
|
||||
|
||||
V : Short_Bit_Array_Type;
|
||||
for V'Address use A_W;
|
||||
pragma Volatile (V);
|
||||
begin
|
||||
for I in V'Range loop
|
||||
V (I) := not V (I);
|
||||
end loop;
|
||||
return W;
|
||||
end;
|
||||
|
||||
end Bit_Packed_Array5;
|
16
gcc/testsuite/gnat.dg/bit_packed_array5.ads
Normal file
16
gcc/testsuite/gnat.dg/bit_packed_array5.ads
Normal file
@ -0,0 +1,16 @@
|
||||
-- { dg-do compile }
|
||||
|
||||
package Bit_Packed_Array5 is
|
||||
|
||||
type Bit_Array is array (Integer range <>) of Boolean;
|
||||
pragma Pack (Bit_Array);
|
||||
|
||||
type Short_Bit_Array_Type is new Bit_Array (0 .. 15);
|
||||
for Short_Bit_Array_Type'Size use 16;
|
||||
|
||||
type Word_Type is range 0 .. 65535;
|
||||
for Word_Type'Size use 16;
|
||||
|
||||
function Inv (Word : Word_Type) return Word_Type;
|
||||
|
||||
end Bit_Packed_Array5;
|
Loading…
x
Reference in New Issue
Block a user