aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRobert Dewar <dewar@gnat.com>2001-12-05 02:36:13 +0000
committerGeert Bosch <bosch@gcc.gnu.org>2001-12-05 03:36:13 +0100
commitf311e16612262241a694f1c260cea65405e30efe (patch)
treeb32bbdea84387d896522202090ae3ce29cf18d67 /gcc
parentd61bd65a64aa5332fd5d4e585a27839712229d1f (diff)
downloadgcc-f311e16612262241a694f1c260cea65405e30efe.zip
gcc-f311e16612262241a694f1c260cea65405e30efe.tar.gz
gcc-f311e16612262241a694f1c260cea65405e30efe.tar.bz2
* sem_ch12.adb:
(Analyze_Formal_Type_Definition): Defend against Error. (Analyze_Formal_Subprogram): Defend against Error. * par-ch12.adb (F_Formal_Type_Declaration): In case of error, remove following semicolon if present. Removes cascaded error. From-SVN: r47652
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/ChangeLog9
-rw-r--r--gcc/ada/par-ch12.adb6
-rw-r--r--gcc/ada/sem_ch12.adb54
3 files changed, 45 insertions, 24 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index a1f08e2..3153721 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,12 @@
+2001-12-04 Robert Dewar <dewar@gnat.com>
+
+ * sem_ch12.adb:
+ (Analyze_Formal_Type_Definition): Defend against Error.
+ (Analyze_Formal_Subprogram): Defend against Error.
+
+ * par-ch12.adb (F_Formal_Type_Declaration): In case of error,
+ remove following semicolon if present. Removes cascaded error.
+
2001-12-04 Douglas B. Rupp <rupp@gnat.com>
* bindgen.adb:
diff --git a/gcc/ada/par-ch12.adb b/gcc/ada/par-ch12.adb
index 5d5dded..5a8b9e3 100644
--- a/gcc/ada/par-ch12.adb
+++ b/gcc/ada/par-ch12.adb
@@ -454,8 +454,14 @@ package body Ch12 is
TF_Semicolon;
else
Decl_Node := Error;
+
+ if Token = Tok_Semicolon then
+ -- Avoid further cascaded errors.
+ Scan;
+ end if;
end if;
+
return Decl_Node;
end P_Formal_Type_Declaration;
diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb
index a345a41..bf6892d 100644
--- a/gcc/ada/sem_ch12.adb
+++ b/gcc/ada/sem_ch12.adb
@@ -1702,6 +1702,10 @@ package body Sem_Ch12 is
Subp : Entity_Id;
begin
+ if Nam = Error then
+ return;
+ end if;
+
if Nkind (Nam) = N_Defining_Program_Unit_Name then
Error_Msg_N ("name of formal subprogram must be a direct name", Nam);
return;
@@ -1858,45 +1862,47 @@ package body Sem_Ch12 is
-- Enter the new name, and branch to specific routine.
case Nkind (Def) is
- when N_Formal_Private_Type_Definition
- => Analyze_Formal_Private_Type (N, T, Def);
+ when N_Formal_Private_Type_Definition =>
+ Analyze_Formal_Private_Type (N, T, Def);
- when N_Formal_Derived_Type_Definition
- => Analyze_Formal_Derived_Type (N, T, Def);
+ when N_Formal_Derived_Type_Definition =>
+ Analyze_Formal_Derived_Type (N, T, Def);
- when N_Formal_Discrete_Type_Definition
- => Analyze_Formal_Discrete_Type (T, Def);
+ when N_Formal_Discrete_Type_Definition =>
+ Analyze_Formal_Discrete_Type (T, Def);
- when N_Formal_Signed_Integer_Type_Definition
- => Analyze_Formal_Signed_Integer_Type (T, Def);
+ when N_Formal_Signed_Integer_Type_Definition =>
+ Analyze_Formal_Signed_Integer_Type (T, Def);
- when N_Formal_Modular_Type_Definition
- => Analyze_Formal_Modular_Type (T, Def);
+ when N_Formal_Modular_Type_Definition =>
+ Analyze_Formal_Modular_Type (T, Def);
- when N_Formal_Floating_Point_Definition
- => Analyze_Formal_Floating_Type (T, Def);
+ when N_Formal_Floating_Point_Definition =>
+ Analyze_Formal_Floating_Type (T, Def);
- when N_Formal_Ordinary_Fixed_Point_Definition
- => Analyze_Formal_Ordinary_Fixed_Point_Type (T, Def);
+ when N_Formal_Ordinary_Fixed_Point_Definition =>
+ Analyze_Formal_Ordinary_Fixed_Point_Type (T, Def);
- when N_Formal_Decimal_Fixed_Point_Definition
- => Analyze_Formal_Decimal_Fixed_Point_Type (T, Def);
+ when N_Formal_Decimal_Fixed_Point_Definition =>
+ Analyze_Formal_Decimal_Fixed_Point_Type (T, Def);
- when N_Array_Type_Definition
- => Analyze_Formal_Array_Type (T, Def);
+ when N_Array_Type_Definition =>
+ Analyze_Formal_Array_Type (T, Def);
- when N_Access_To_Object_Definition |
- N_Access_Function_Definition |
- N_Access_Procedure_Definition
- => Analyze_Generic_Access_Type (T, Def);
+ when N_Access_To_Object_Definition |
+ N_Access_Function_Definition |
+ N_Access_Procedure_Definition =>
+ Analyze_Generic_Access_Type (T, Def);
- when others =>
+ when N_Error =>
+ null;
+
+ when others =>
raise Program_Error;
end case;
Set_Is_Generic_Type (T);
-
end Analyze_Formal_Type_Declaration;
------------------------------------