[Ada] Missing error on illegal expanded name

Arnaud Charlet charlet@adacore.com
Mon Jun 14 12:34:00 GMT 2010


If an expanded name P.S is illegal, and P is an open scope, we examine the
context to determine whether there is a compilation unit in the context, named
P, that may be hidden by the scope P, and specialize the error message if the
outer P does contain an entity named S. If there is no such entity, and there
is no other semantic error in the program, the reference was left unresolved but
no error message was emitted, leading to a back-end crash. This patch fixes ths
oversight by generating the proper error message.

Compiling the following must yield:

     b-a.adb:7:06: "Bar" not declared in "A"

package A is
   procedure Do_It;
end A;
---
package B is
   procedure Bla;
end B;
---
package B.A is
   procedure Foo;
end B.A;
---
with A;
package body B.A is
   procedure Foo is
   begin
      A.Bar;   -- ERROR
   end Foo;
end B.A;
--

Tested on x86_64-pc-linux-gnu, committed on trunk

2010-06-14  Ed Schonberg  <schonberg@adacore.com>

	* sem_ch8.adb (Find_Expanded_Name): If a candidate compilation unit in
	the context does not have a homonym of the selector, emit default
	error message.

-------------- next part --------------
Index: sem_ch8.adb
===================================================================
--- sem_ch8.adb	(revision 160711)
+++ sem_ch8.adb	(working copy)
@@ -4785,11 +4785,17 @@ package body Sem_Ch8 is
                                 ("\use fully qualified name starting with"
                                   & " Standard to make& visible", N, H);
                               Error_Msg_Qual_Level := 0;
-                              exit;
+                              goto Done;
                            end if;
 
                            Next_Entity (Id);
                         end loop;
+
+                        --  If not found,  standard error message.
+
+                        Error_Msg_NE ("& not declared in&", N, Selector);
+
+                        <<Done>> null;
                      end;
 
                   else


More information about the Gcc-patches mailing list