diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-11-15 14:01:09 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-11-15 14:01:09 +0000 |
commit | ae28d23177d9337aa30fdfd1afda15057082587c (patch) | |
tree | fb3a2c3f9b886d8b8f2c2fcfe8d46e6e2d925883 /gcc/ada/par-ch10.adb | |
parent | 8da8c47fb88a704c4fe8d76280f9fb0d93e17afe (diff) | |
download | gcc-ae28d23177d9337aa30fdfd1afda15057082587c.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@106993 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/par-ch10.adb')
-rw-r--r-- | gcc/ada/par-ch10.adb | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/gcc/ada/par-ch10.adb b/gcc/ada/par-ch10.adb index 13d0fbd1f00..bedb679081a 100644 --- a/gcc/ada/par-ch10.adb +++ b/gcc/ada/par-ch10.adb @@ -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)); |