From dd5875a602fb7adef53362fab59cac17bf5ff77d Mon Sep 17 00:00:00 2001 From: Ed Schonberg Date: Wed, 5 Dec 2001 01:21:50 +0000 Subject: [PATCH] sem_ch3.adb (Find_Type_Of_Subtype_Indic): If subtype indication is malformed... * 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 | 10 ++++++++++ gcc/ada/par-ch12.adb | 25 ++++++++++++++++++++++--- gcc/ada/sem_ch3.adb | 6 +++++- 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 7d9a411b63c..72e747da933 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,13 @@ +2001-12-04 Ed Schonberg + + * 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 * sem_warn.adb (Output_Unreferenced_Messages): Extend previous fix to diff --git a/gcc/ada/par-ch12.adb b/gcc/ada/par-ch12.adb index 139243e67e2..5d5dded4d30 100644 --- a/gcc/ada/par-ch12.adb +++ b/gcc/ada/par-ch12.adb @@ -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; diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb index f3b0de02651..2b481bdfe76 100644 --- a/gcc/ada/sem_ch3.adb +++ b/gcc/ada/sem_ch3.adb @@ -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); -- 2.30.2