par-ch10.adb (P_Compilation_Unit): Add defenses against junk unit syntax, which could cause compiler hangs.

2005-11-14  Robert Dewar  <dewar@adacore.com>

	* par-ch10.adb (P_Compilation_Unit): Add defenses against junk unit
	syntax, which could cause compiler hangs.

From-SVN: r106993
This commit is contained in:
Robert Dewar 2005-11-15 15:01:09 +01:00 committed by Arnaud Charlet
parent 62157e75fb
commit 3c43f85317
1 changed files with 20 additions and 5 deletions

View File

@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
-- Copyright (C) 1992-2005 Free Software Foundation, Inc. --
-- Copyright (C) 1992-2005, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@ -405,9 +405,7 @@ package body Ch10 is
elsif Private_Sloc /= No_Location
and then
Nkind (Unit (Comp_Unit_Node)) /= N_Function_Instantiation
and then
Nkind (Unit (Comp_Unit_Node)) /= N_Procedure_Instantiation
Nkind (Unit (Comp_Unit_Node)) not in N_Subprogram_Instantiation
and then
Nkind (Unit (Comp_Unit_Node)) /= N_Subprogram_Renaming_Declaration
then
@ -529,8 +527,25 @@ package body Ch10 is
or else Nkind (Unit_Node) = N_Single_Protected_Declaration
then
Name_Node := Defining_Identifier (Unit_Node);
else
elsif Nkind (Unit_Node) = N_Function_Instantiation
or else Nkind (Unit_Node) = N_Function_Specification
or else Nkind (Unit_Node) = N_Generic_Function_Renaming_Declaration
or else Nkind (Unit_Node) = N_Generic_Package_Renaming_Declaration
or else Nkind (Unit_Node) = N_Generic_Procedure_Renaming_Declaration
or else Nkind (Unit_Node) = N_Package_Body
or else Nkind (Unit_Node) = N_Package_Instantiation
or else Nkind (Unit_Node) = N_Package_Renaming_Declaration
or else Nkind (Unit_Node) = N_Package_Specification
or else Nkind (Unit_Node) = N_Procedure_Instantiation
or else Nkind (Unit_Node) = N_Procedure_Specification
then
Name_Node := Defining_Unit_Name (Unit_Node);
-- Anything else is a serious error, abandon scan
else
raise Error_Resync;
end if;
Set_Sloc (Comp_Unit_Node, Sloc (Name_Node));