+2010-12-16 Eric Botcazou <ebotcazou@adacore.com>
+
+ * tree-ssa-sccvn.c (vn_reference_lookup_3): Always punt if the call to
+ get_ref_base_and_extent returns -1 as the max size.
+
2010-12-16 Richard Guenther <rguenther@suse.de>
* DEV-PHASE: Set back to prerelease.
--- /dev/null
+package body Opt13_Pkg is\r
+\r
+ subtype Index_Type is Natural range 0 .. 16;\r
+\r
+ type Arr is array (Index_Type range <>) of Integer;\r
+\r
+ type Rec is record\r
+ F1, F2, F3 : Float;\r
+ N : Natural;\r
+ B1, B2 : Boolean;\r
+ F4 : Float;\r
+ end record;\r
+\r
+ type Data (D : Index_Type) is record\r
+ A : Arr (1 .. D);\r
+ R : Rec;\r
+ end record;\r
+\r
+ Zero : constant Rec := (0.0, 0.0, 0.0, 0, False, False, 0.0);\r
+\r
+ procedure Allocate (T : out My_Type) is\r
+ begin\r
+ T := new Data (Index_Type'last);\r
+ T.R := Zero;\r
+\r
+ for I in 1 .. T.A'last loop\r
+ N := 1;\r
+ end loop;\r
+ end;\r
+\r
+end Opt13_Pkg;\r
size2 = TREE_INT_CST_LOW (gimple_call_arg (def_stmt, 2)) * 8;
if ((unsigned HOST_WIDE_INT)size2 / 8
== TREE_INT_CST_LOW (gimple_call_arg (def_stmt, 2))
+ && maxsize2 != -1
&& operand_equal_p (base, base2, 0)
&& offset2 <= offset
&& offset2 + size2 >= offset + maxsize)
HOST_WIDE_INT offset2, size2, maxsize2;
base2 = get_ref_base_and_extent (gimple_assign_lhs (def_stmt),
&offset2, &size2, &maxsize2);
- if (operand_equal_p (base, base2, 0)
+ if (maxsize2 != -1
+ && operand_equal_p (base, base2, 0)
&& offset2 <= offset
&& offset2 + size2 >= offset + maxsize)
{
/* See if the assignment kills REF. */
base2 = get_ref_base_and_extent (gimple_assign_lhs (def_stmt),
&offset2, &size2, &maxsize2);
- if (!operand_equal_p (base, base2, 0)
+ if (maxsize2 == -1
+ || !operand_equal_p (base, base2, 0)
|| offset2 > offset
|| offset2 + size2 < offset + maxsize)
return (void *)-1;