sem_ch10.adb (Analyze_Subunit_Context): When analyzing context clauses of subunits...
authorEd Schonberg <schonberg@adacore.com>
Fri, 31 Aug 2007 10:23:59 +0000 (12:23 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Fri, 31 Aug 2007 10:23:59 +0000 (12:23 +0200)
2007-08-31  Ed Schonberg  <schonberg@adacore.com>

* sem_ch10.adb (Analyze_Subunit_Context): When analyzing context
clauses of subunits, ignore limited_with_clauses that are illegal and
have not been fully analyzed.

From-SVN: r127979

gcc/ada/sem_ch10.adb

index 14739b916ff3de7a9bd4a7b83fc5ab5b24f6c34c..29d10de9425517ea8003829e6ca5d76f077f41a4 100644 (file)
@@ -1892,15 +1892,20 @@ package body Sem_Ch10 is
                --  Protect frontend against previous errors in context clauses
 
                if Nkind (Name (Item)) /= N_Selected_Component then
-                  Unit_Name := Entity (Name (Item));
-                  while Is_Child_Unit (Unit_Name) loop
-                     Set_Is_Visible_Child_Unit (Unit_Name);
-                     Unit_Name := Scope (Unit_Name);
-                  end loop;
+                  if Error_Posted (Item) then
+                     null;
+
+                  else
+                     Unit_Name := Entity (Name (Item));
+                     while Is_Child_Unit (Unit_Name) loop
+                        Set_Is_Visible_Child_Unit (Unit_Name);
+                        Unit_Name := Scope (Unit_Name);
+                     end loop;
 
-                  if not Is_Immediately_Visible (Unit_Name) then
-                     Set_Is_Immediately_Visible (Unit_Name);
-                     Set_Context_Installed (Item);
+                     if not Is_Immediately_Visible (Unit_Name) then
+                        Set_Is_Immediately_Visible (Unit_Name);
+                        Set_Context_Installed (Item);
+                     end if;
                   end if;
                end if;
 
@@ -1932,6 +1937,7 @@ package body Sem_Ch10 is
                --  Protect frontend against previous errors in context clauses
 
               and then Nkind (Name (Item)) /= N_Selected_Component
+              and then not Error_Posted (Item)
             then
                Unit_Name := Entity (Name (Item));
                while Is_Child_Unit (Unit_Name) loop