Commit 3c43f853 by Robert Dewar Committed by Arnaud Charlet

par-ch10.adb (P_Compilation_Unit): Add defenses against junk unit syntax, which…

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
parent 62157e75
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- -- -- --
-- B o d y -- -- 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 -- -- 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- -- -- terms of the GNU General Public License as published by the Free Soft- --
...@@ -405,9 +405,7 @@ package body Ch10 is ...@@ -405,9 +405,7 @@ package body Ch10 is
elsif Private_Sloc /= No_Location elsif Private_Sloc /= No_Location
and then and then
Nkind (Unit (Comp_Unit_Node)) /= N_Function_Instantiation Nkind (Unit (Comp_Unit_Node)) not in N_Subprogram_Instantiation
and then
Nkind (Unit (Comp_Unit_Node)) /= N_Procedure_Instantiation
and then and then
Nkind (Unit (Comp_Unit_Node)) /= N_Subprogram_Renaming_Declaration Nkind (Unit (Comp_Unit_Node)) /= N_Subprogram_Renaming_Declaration
then then
...@@ -529,8 +527,25 @@ package body Ch10 is ...@@ -529,8 +527,25 @@ package body Ch10 is
or else Nkind (Unit_Node) = N_Single_Protected_Declaration or else Nkind (Unit_Node) = N_Single_Protected_Declaration
then then
Name_Node := Defining_Identifier (Unit_Node); 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); Name_Node := Defining_Unit_Name (Unit_Node);
-- Anything else is a serious error, abandon scan
else
raise Error_Resync;
end if; end if;
Set_Sloc (Comp_Unit_Node, Sloc (Name_Node)); Set_Sloc (Comp_Unit_Node, Sloc (Name_Node));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment