From 96bba5e69b93ae01d7f49dd1c12c94ddb462c381 Mon Sep 17 00:00:00 2001 From: Eric Botcazou <ebotcazou@adacore.com> Date: Fri, 23 Jul 2010 19:53:29 +0000 Subject: [PATCH] utils.c (gnat_types_compatible_p): Revert latest change and recurse only for multidimensional array types instead. * gcc-interface/utils.c (gnat_types_compatible_p): Revert latest change and recurse only for multidimensional array types instead. From-SVN: r162485 --- gcc/ada/ChangeLog | 5 +++++ gcc/ada/gcc-interface/utils.c | 6 ++++-- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gnat.dg/aggr16.adb | 26 ++++++++++++++++++++++++++ gcc/testsuite/gnat.dg/aggr16.ads | 5 +++++ gcc/testsuite/gnat.dg/aggr16_pkg.ads | 27 +++++++++++++++++++++++++++ 6 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gnat.dg/aggr16.adb create mode 100644 gcc/testsuite/gnat.dg/aggr16.ads create mode 100644 gcc/testsuite/gnat.dg/aggr16_pkg.ads diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index f631f84bd8b0..1ef253c4494b 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2010-07-23 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/utils.c (gnat_types_compatible_p): Revert latest change + and recurse only for multidimensional array types instead. + 2010-07-22 Eric Botcazou <ebotcazou@adacore.com> PR ada/44892 diff --git a/gcc/ada/gcc-interface/utils.c b/gcc/ada/gcc-interface/utils.c index 541f7bb3f919..7752edb4b689 100644 --- a/gcc/ada/gcc-interface/utils.c +++ b/gcc/ada/gcc-interface/utils.c @@ -2081,7 +2081,7 @@ gnat_types_compatible_p (tree t1, tree t2) return 1; /* Array types are also compatible if they are constrained and have the same - domain and compatible component types. */ + domain(s) and the same component type. */ if (code == ARRAY_TYPE && (TYPE_DOMAIN (t1) == TYPE_DOMAIN (t2) || (TYPE_DOMAIN (t1) @@ -2090,7 +2090,9 @@ gnat_types_compatible_p (tree t1, tree t2) TYPE_MIN_VALUE (TYPE_DOMAIN (t2))) && tree_int_cst_equal (TYPE_MAX_VALUE (TYPE_DOMAIN (t1)), TYPE_MAX_VALUE (TYPE_DOMAIN (t2))))) - && gnat_types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2))) + && (TREE_TYPE (t1) == TREE_TYPE (t2) + || (TREE_CODE (TREE_TYPE (t1)) == ARRAY_TYPE + && gnat_types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2))))) return 1; /* Padding record types are also compatible if they pad the same diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9e8c046b2aa4..bdc2660cbbec 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-07-23 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/aggr16.ad[sb]: New test. + * gnat.dg/aggr16_pkg.ads: New helper. + 2010-07-23 Richard Guenther <rguenther@suse.de> PR lto/43071 diff --git a/gcc/testsuite/gnat.dg/aggr16.adb b/gcc/testsuite/gnat.dg/aggr16.adb new file mode 100644 index 000000000000..2f559da25f9b --- /dev/null +++ b/gcc/testsuite/gnat.dg/aggr16.adb @@ -0,0 +1,26 @@ +-- { dg-do compile } + +with Aggr16_Pkg; use Aggr16_Pkg; + +package body Aggr16 is + + type Arr is array (1 .. 4) of Time; + + type Change_Type is (One, Two, Three); + + type Change (D : Change_Type) is record + case D is + when Three => + A : Arr; + when Others => + B : Boolean; + end case; + end record; + + procedure Proc is + C : Change (Three); + begin + C.A := (others => Null_Time); + end; + +end Aggr16; diff --git a/gcc/testsuite/gnat.dg/aggr16.ads b/gcc/testsuite/gnat.dg/aggr16.ads new file mode 100644 index 000000000000..3a4b0d1dfa8d --- /dev/null +++ b/gcc/testsuite/gnat.dg/aggr16.ads @@ -0,0 +1,5 @@ +package Aggr16 is + + procedure Proc; + +end Aggr16; diff --git a/gcc/testsuite/gnat.dg/aggr16_pkg.ads b/gcc/testsuite/gnat.dg/aggr16_pkg.ads new file mode 100644 index 000000000000..8bacbc9b04fb --- /dev/null +++ b/gcc/testsuite/gnat.dg/aggr16_pkg.ads @@ -0,0 +1,27 @@ +package Aggr16_Pkg is + + type Time_Type is (A, B); + + type Time (D : Time_Type := A) is private; + + Null_Time : constant Time; + +private + + type Hour is record + I1 : Integer; + I2 : Integer; + end record; + + type Time (D : Time_Type := A) is record + case D is + when A => + A_Time : Integer; + when B => + B_Time : Hour; + end case; + end record; + + Null_Time : constant Time := (A, 0); + +end Aggr16_Pkg; -- GitLab