From patchwork Mon Jun 14 12:25:03 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [Ada] Missing error on illegal expanded name Date: Mon, 14 Jun 2010 02:25:03 -0000 From: Arnaud Charlet X-Patchwork-Id: 55522 Message-Id: <20100614122503.GA6740@adacore.com> To: gcc-patches@gcc.gnu.org Cc: Ed Schonberg 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 * 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. 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); + + <> null; end; else