2013-10-14 Hristian Kirtchev <kirtchev@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 14 Oct 2013 13:21:37 +0000 (13:21 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 14 Oct 2013 13:21:37 +0000 (13:21 +0000)
* sem_prag.adb (Check_Mode): Do not emit an
error when inspecting a self referencial output item of an
unconstrained type.

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

gcc/ada/ChangeLog
gcc/ada/sem_prag.adb

index dcad0df..5462077 100644 (file)
@@ -1,3 +1,9 @@
+2013-10-14  Hristian Kirtchev  <kirtchev@adacore.com>
+
+       * sem_prag.adb (Check_Mode): Do not emit an
+       error when inspecting a self referencial output item of an
+       unconstrained type.
+
 2013-10-14  Tristan Gingold  <gingold@adacore.com>
 
        * exp_prag.adb (Expand_Pragma_Import_Export_Exception): Fix
index 21e4765..fc263c2 100644 (file)
@@ -928,6 +928,15 @@ package body Sem_Prag is
                   Error_Msg_NE ("item & must have mode in out", Item, Item_Id);
                end if;
 
+            --  A self-referential out parameter of an unconstrained or tagged
+            --  type acts as an input because the discriminants, array bounds
+            --  or the tag may be read.
+
+            elsif Ekind (Item_Id) = E_Out_Parameter
+              and then Is_Unconstrained_Or_Tagged_Item (Item_Id)
+            then
+               null;
+
             --  Self-referential parameter
 
             elsif Ekind (Item_Id) /= E_In_Out_Parameter then