aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada
diff options
context:
space:
mode:
authorRobert Dewar <dewar@adacore.com>2005-03-29 18:17:40 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2005-03-29 18:17:40 +0200
commit6d458cc580dacbd3e52e3203c3acdc9ffdce70ba (patch)
tree1dfe244a348131643907bb281728ba59f495d509 /gcc/ada
parenta276fddfdbbadaa200dabbd006e308a14377f484 (diff)
downloadgcc-6d458cc580dacbd3e52e3203c3acdc9ffdce70ba.zip
gcc-6d458cc580dacbd3e52e3203c3acdc9ffdce70ba.tar.gz
gcc-6d458cc580dacbd3e52e3203c3acdc9ffdce70ba.tar.bz2
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
Diffstat (limited to 'gcc/ada')
-rw-r--r--gcc/ada/par-ch3.adb34
1 files changed, 31 insertions, 3 deletions
diff --git a/gcc/ada/par-ch3.adb b/gcc/ada/par-ch3.adb
index d28f1a9..0c02ff7 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;