From 6d458cc580dacbd3e52e3203c3acdc9ffdce70ba Mon Sep 17 00:00:00 2001 From: Robert Dewar <dewar@adacore.com> Date: Tue, 29 Mar 2005 18:17:40 +0200 Subject: [PATCH] par-ch3.adb (P_Type_Declaration): Fix bad error recovery after missing TYPE Improve the error message generated... 2005-03-29 Robert Dewar <dewar@adacore.com> * par-ch3.adb (P_Type_Declaration): Fix bad error recovery after missing TYPE Improve the error message generated when compiling a limited interface in Ada83 or Ada95 mode. From-SVN: r97178 --- gcc/ada/par-ch3.adb | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/gcc/ada/par-ch3.adb b/gcc/ada/par-ch3.adb index d28f1a9a07dc..0c02ff7d0358 100644 --- a/gcc/ada/par-ch3.adb +++ b/gcc/ada/par-ch3.adb @@ -279,8 +279,29 @@ package body Ch3 is begin Type_Loc := Token_Ptr; Type_Start_Col := Start_Column; - T_Type; - Ident_Node := P_Defining_Identifier (C_Is); + + -- If we have TYPE, then proceed ahead and scan identifier + + if Token = Tok_Type then + Scan; -- past TYPE + Ident_Node := P_Defining_Identifier (C_Is); + + -- Otherwise this is an error case, and we may already have converted + -- the current token to a defining identifier, so don't do it again! + + else + T_Type; + + if Token = Tok_Identifier + and then Nkind (Token_Node) = N_Defining_Identifier + then + Ident_Node := Token_Node; + Scan; -- past defining identifier + else + Ident_Node := P_Defining_Identifier (C_Is); + end if; + end if; + Discr_Sloc := Token_Ptr; if P_Unknown_Discriminant_Part_Opt then @@ -586,7 +607,14 @@ package body Ch3 is -- Ada 2005 (AI-251): LIMITED INTERFACE - elsif Token = Tok_Interface then + -- If we are compiling in Ada 83 or Ada 95 mode, "interface" + -- is not a reserved word but we force its analysis to + -- generate the corresponding usage error. + + elsif Token = Tok_Interface + or else (Token = Tok_Identifier + and then Chars (Token_Node) = Name_Interface) + then Typedef_Node := P_Interface_Type_Definition (Is_Synchronized => False); Abstract_Present := True; -- GitLab