[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