sem_ch3.adb (Find_Type_Of_Subtype_Indic): If subtype indication is malformed...
authorEd Schonberg <schonber@gnat.com>
Wed, 5 Dec 2001 01:21:50 +0000 (01:21 +0000)
committerGeert Bosch <bosch@gcc.gnu.org>
Wed, 5 Dec 2001 01:21:50 +0000 (02:21 +0100)
* sem_ch3.adb (Find_Type_Of_Subtype_Indic): If subtype indication
is malformed, use instance of Any_Id to allow analysis to proceed.

* par-ch12.adb (P_Formal_Type_Declaration): Propagate Error if
type definition is illegal.
(P_Formal_Derived_Type_Definition): Better recovery when TAGGED is
misplaced.

From-SVN: r47642

gcc/ada/ChangeLog
gcc/ada/par-ch12.adb
gcc/ada/sem_ch3.adb

index 7d9a411b63c35e569089ff2accd58631921ea276..72e747da933a1667114e6116626b1851adb68a44 100644 (file)
@@ -1,3 +1,13 @@
+2001-12-04  Ed Schonberg <schonber@gnat.com>
+
+       * sem_ch3.adb (Find_Type_Of_Subtype_Indic): If subtype indication 
+       is malformed, use instance of Any_Id to allow analysis to proceed.
+       
+       * par-ch12.adb (P_Formal_Type_Declaration): Propagate Error if 
+       type definition is illegal.
+       (P_Formal_Derived_Type_Definition): Better recovery when TAGGED is
+       misplaced.
+
 2001-12-04  Ed Schonberg <schonber@gnat.com>
 
        * sem_warn.adb (Output_Unreferenced_Messages): Extend previous fix to 
index 139243e67e2bbc8a2a2ae5a9e76264f1dd42438e..5d5dded4d30a740757931d663185e5a393f92551 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---                            $Revision: 1.46 $
+--                            $Revision$
 --                                                                          --
 --          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
 --                                                                          --
@@ -431,6 +431,7 @@ package body Ch12 is
 
    function P_Formal_Type_Declaration return Node_Id is
       Decl_Node  : Node_Id;
+      Def_Node   : Node_Id;
 
    begin
       Decl_Node := New_Node (N_Formal_Type_Declaration, Token_Ptr);
@@ -446,8 +447,15 @@ package body Ch12 is
 
       T_Is;
 
-      Set_Formal_Type_Definition (Decl_Node, P_Formal_Type_Definition);
-      TF_Semicolon;
+      Def_Node := P_Formal_Type_Definition;
+
+      if Def_Node /= Error then
+         Set_Formal_Type_Definition (Decl_Node, Def_Node);
+         TF_Semicolon;
+      else
+         Decl_Node := Error;
+      end if;
+
       return Decl_Node;
    end P_Formal_Type_Declaration;
 
@@ -621,6 +629,17 @@ package body Ch12 is
          Scan; -- past WITH
          Set_Private_Present (Def_Node, True);
          T_Private;
+
+      elsif Token = Tok_Tagged then
+         Scan;
+
+         if Token = Tok_Private then
+            Error_Msg_SC ("TAGGED should be WITH");
+            Set_Private_Present (Def_Node, True);
+            T_Private;
+         else
+            Ignore (Tok_Tagged);
+         end if;
       end if;
 
       return Def_Node;
index f3b0de02651eb76ffe67421737a36eaa15759f48..2b481bdfe76d6741e72011101b0043017e7b7adc 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---                            $Revision: 1.2 $
+--                            $Revision$
 --                                                                          --
 --          Copyright (C) 1992-2001, Free Software Foundation, Inc.         --
 --                                                                          --
@@ -9300,6 +9300,10 @@ package body Sem_Ch3 is
 
       --  Otherwise we have a subtype mark without a constraint
 
+      elsif Error_Posted (S) then
+         Rewrite (S, New_Occurrence_Of (Any_Id, Sloc (S)));
+         return Any_Type;
+
       else
          Find_Type (S);
          Typ := Entity (S);