sem_ch12.adb (Validate_Array_Type_Instance): Only apply complex visibility check...
authorArnaud Charlet <charlet@gcc.gnu.org>
Tue, 5 Aug 2008 09:40:19 +0000 (11:40 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Tue, 5 Aug 2008 09:40:19 +0000 (11:40 +0200)
2008-08-05  Ed Schonberg  <schonberg@adacore.com>

* sem_ch12.adb (Validate_Array_Type_Instance): Only apply complex
visibility check on the component type if the simple test fails.

From-SVN: r138697

gcc/ada/ChangeLog
gcc/ada/sem_ch12.adb

index 9a4800006c7eb50c6c903d3eadc7a7f05f34891a..2628acedb223e875d55e536143ae99c4ecf76759 100644 (file)
@@ -1,3 +1,14 @@
+2008-08-05  Robert Dewar  <dewar@adacore.com>
+
+       * sem_ch3.adb: Minor reformatting
+
+       * prj-nmsc.adb: Minor reformatting
+
+2008-08-05  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_ch12.adb (Validate_Array_Type_Instance): Only apply complex
+       visibility check on the component type if the simple test fails.
+
 2008-08-05  Jose Ruiz  <ruiz@adacore.com>
 
        * init.c (__gnat_install_handler for linux): If we are building the
index 147a097aa0725a45ecb701c49eb02d2f85f27ab5..dc23ddea238dfe08d3daec7d48711259cb7478a0 100644 (file)
@@ -9246,10 +9246,20 @@ package body Sem_Ch12 is
             Next_Index (I2);
          end loop;
 
-         if not Subtypes_Match
-                  (Find_Actual_Type (Component_Type (A_Gen_T), A_Gen_T),
-                   Component_Type (Act_T))
+         --  Check matching subtypes. Note that there are complex visibility
+         --  issues when the generic is a child unit and some aspect of the
+         --  generic type is declared in a parent unit of the generic. We do
+         --  the test to handle this special case only after a direct check
+         --  for static matching has failed.
+
+         if Subtypes_Match
+           (Component_Type (A_Gen_T), Component_Type (Act_T))
+             or else Subtypes_Match
+                      (Find_Actual_Type (Component_Type (A_Gen_T), A_Gen_T),
+                       Component_Type (Act_T))
          then
+            null;
+         else
             Error_Msg_NE
               ("component subtype of actual does not match that of formal &",
                Actual, Gen_T);