re PR ada/28733 (GNAT crash while compiling Ada-2005 code)
authorSamuel Tardieu <sam@rfc1149.net>
Tue, 15 Apr 2008 11:59:39 +0000 (11:59 +0000)
committerSamuel Tardieu <sam@gcc.gnu.org>
Tue, 15 Apr 2008 11:59:39 +0000 (11:59 +0000)
2008-04-15  Samuel Tardieu  <sam@rfc1149.net>
            Gary Dismukes  <dismukes@adacore.com>

    gcc/ada/
PR ada/28733
* sem_ch8.adb (Analyze_Use_Package): Do not allow "use" of something
which is not an entity (and hence not a package).
(End_Use_Package): Ditto.

Co-Authored-By: Gary Dismukes <dismukes@adacore.com>
From-SVN: r134313

gcc/ada/ChangeLog
gcc/ada/sem_ch8.adb

index cec2e8cb2e595a8281a594b900d9591772d2352a..67434655c8e9f9e198733f9fc981f0c1c967788d 100644 (file)
@@ -1,3 +1,11 @@
+2008-04-15  Samuel Tardieu  <sam@rfc1149.net>
+            Gary Dismukes  <dismukes@adacore.com>
+
+       PR ada/28733
+       * sem_ch8.adb (Analyze_Use_Package): Do not allow "use" of something
+       which is not an entity (and hence not a package).
+       (End_Use_Package): Ditto.
+
 2008-04-15  Ed Schonberg  <schonberg@adacore.com>
 
        PR ada/16086
index 2d4d7fe463503bb7e88f2030bed753d15daaca5e..3b28bdfe868f171e85be4a98a3b7d612df382b2a 100644 (file)
@@ -2396,6 +2396,11 @@ package body Sem_Ch8 is
                   Use_One_Package (Pack, N);
                end if;
             end if;
+
+         --  Report error because name denotes something other than a package
+
+         else
+            Error_Msg_N ("& is not a package", Pack_Name);
          end if;
 
          Next (Pack_Name);
@@ -3066,9 +3071,14 @@ package body Sem_Ch8 is
    begin
       Pack_Name := First (Names (N));
       while Present (Pack_Name) loop
-         Pack := Entity (Pack_Name);
 
-         if Ekind (Pack) = E_Package then
+         --  Test that Pack_Name actually denotes a package before processing
+
+         if Is_Entity_Name (Pack_Name)
+           and then Ekind (Entity (Pack_Name)) = E_Package
+         then
+            Pack := Entity (Pack_Name);
+
             if In_Open_Scopes (Pack) then
                null;