OSDN Git Service

* gimple.c (gimple_types_compatible_p) <ARRAY_TYPE>: Treat bounds of
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 8 May 2010 12:06:57 +0000 (12:06 +0000)
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 8 May 2010 12:06:57 +0000 (12:06 +0000)
domain types as equal if they are both PLACEHOLDER_EXPRs.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159185 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/gimple.c
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/lto6.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/lto6_pkg.ads [new file with mode: 0644]

index b3097a6..735c120 100644 (file)
@@ -1,3 +1,8 @@
+2010-05-08  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gimple.c (gimple_types_compatible_p) <ARRAY_TYPE>: Treat bounds of
+       domain types as equal if they are both PLACEHOLDER_EXPRs.
+
 2010-05-08  Richard Guenther  <rguenther@suse.de>
 
        * lto-wrapper.c (run_gcc): Remove linker output from
index 6d439c5..d9a613a 100644 (file)
@@ -3305,9 +3305,15 @@ gimple_types_compatible_p (tree t1, tree t2)
 
              /* The minimum/maximum values have to be the same.  */
              if ((min1 == min2
-                  || (min1 && min2 && operand_equal_p (min1, min2, 0)))
+                  || (min1 && min2
+                      && ((TREE_CODE (min1) == PLACEHOLDER_EXPR
+                           && TREE_CODE (min2) == PLACEHOLDER_EXPR)
+                          || operand_equal_p (min1, min2, 0))))
                  && (max1 == max2
-                     || (max1 && max2 && operand_equal_p (max1, max2, 0))))
+                     || (max1 && max2
+                         && ((TREE_CODE (max1) == PLACEHOLDER_EXPR
+                              && TREE_CODE (max2) == PLACEHOLDER_EXPR)
+                             || operand_equal_p (max1, max2, 0)))))
                goto same_types;
              else
                goto different_types;
index 85dd6b9..b0d26f1 100644 (file)
@@ -1,5 +1,10 @@
 2010-05-08  Eric Botcazou  <ebotcazou@adacore.com>
 
+       * gnat.dg/lto6.adb: New test.
+       * gnat.dg/lto6_pkg.ads: New helper.
+
+2010-05-08  Eric Botcazou  <ebotcazou@adacore.com>
+
        * gnat.dg/lto5.adb: New test.
        * gnat.dg/lto5_pkg.ad[sb]: New helper.
 
diff --git a/gcc/testsuite/gnat.dg/lto6.adb b/gcc/testsuite/gnat.dg/lto6.adb
new file mode 100644 (file)
index 0000000..f3d4841
--- /dev/null
@@ -0,0 +1,11 @@
+-- { dg-do run }
+-- { dg-options "-gnat05 -O2 -flto" }
+
+with Lto6_Pkg; use Lto6_Pkg;
+
+procedure Lto6 is
+  type Enum is (A, B, C, D);
+  Table : array (B .. C, 1 .. 1) of F_String := (others => (others => Null_String));
+begin
+  Table := (others => (others => Null_String));
+end;
diff --git a/gcc/testsuite/gnat.dg/lto6_pkg.ads b/gcc/testsuite/gnat.dg/lto6_pkg.ads
new file mode 100644 (file)
index 0000000..81b7ddc
--- /dev/null
@@ -0,0 +1,8 @@
+with Ada.Finalization; use Ada.Finalization;
+
+package Lto6_Pkg is
+  type F_String is new Controlled with record
+    Data : access String;
+  end record;
+  Null_String : constant F_String := (Controlled with Data => null);
+end Lto6_Pkg;