summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>2010-05-08 12:06:57 +0000
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>2010-05-08 12:06:57 +0000
commitc9d19f43d70873e74aa3b03270d6b5c06256b68a (patch)
tree57e6668227eb70406d56df0c6b6cd2991214eb57
parent7640ed3d8a38f4eedd02419fb353ac66320fc78e (diff)
downloadgcc-c9d19f43d70873e74aa3b03270d6b5c06256b68a.tar.gz
* gimple.c (gimple_types_compatible_p) <ARRAY_TYPE>: Treat bounds of
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
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/gimple.c10
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gnat.dg/lto6.adb11
-rw-r--r--gcc/testsuite/gnat.dg/lto6_pkg.ads8
5 files changed, 37 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b3097a65887..735c120b2e7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/gimple.c b/gcc/gimple.c
index 6d439c553a2..d9a613ad189 100644
--- a/gcc/gimple.c
+++ b/gcc/gimple.c
@@ -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;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 85dd6b9d856..b0d26f113db 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 00000000000..f3d4841d7aa
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/lto6.adb
@@ -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
index 00000000000..81b7ddc5a87
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/lto6_pkg.ads
@@ -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;