[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Tue, 25 Apr 2017 09:47:33 +0000 (11:47 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Tue, 25 Apr 2017 09:47:33 +0000 (11:47 +0200)
2017-04-25  Bob Duff  <duff@adacore.com>

* sem_ch8.adb (Use_One_Type): If a use_type_clause
is redundant, set its Used_Operations to empty. This is only
necessary for use clauses that appear in the parent of a generic
child unit, because those use clauses get reanalyzed when we
instantiate the generic, and we don't want the Used_Operations
carried over from the original context (where it was probably
not redundant).

2017-04-25  Hristian Kirtchev  <kirtchev@adacore.com>

* exp_ch6.adb: Minor reformatting.

From-SVN: r247169

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

index e108648cf6b706771fd94b3467dba1566f9f7f29..9f06f0cd210fc8521e57e68bddc6a54ad58fb29b 100644 (file)
@@ -1,3 +1,17 @@
+2017-04-25  Bob Duff  <duff@adacore.com>
+
+       * sem_ch8.adb (Use_One_Type): If a use_type_clause
+       is redundant, set its Used_Operations to empty. This is only
+       necessary for use clauses that appear in the parent of a generic
+       child unit, because those use clauses get reanalyzed when we
+       instantiate the generic, and we don't want the Used_Operations
+       carried over from the original context (where it was probably
+       not redundant).
+
+2017-04-25  Hristian Kirtchev  <kirtchev@adacore.com>
+
+       * exp_ch6.adb: Minor reformatting.
+
 2017-04-25  Bob Duff  <duff@adacore.com>
 
        * sem_prag.adb (Process_Restrictions_Or_Restriction_Warnings):
index 8c4868d7eb324806f1a5d201abfa29a24f1aa8b6..c6b235cffaaa31642647859e2ad1a1bfada3a1a3 100644 (file)
@@ -6635,10 +6635,10 @@ package body Exp_Ch6 is
                    Attribute_Name => Name_Tag);
             end if;
 
-            if not CodePeer_Mode then
-               --  CodePeer doesn't do anything useful with
-               --  Ada.Tags.Type_Specific_Data components
+            --  CodePeer does not do anything useful with
+            --  Ada.Tags.Type_Specific_Data components.
 
+            if not CodePeer_Mode then
                Insert_Action (Exp,
                  Make_Raise_Program_Error (Loc,
                    Condition =>
@@ -6647,7 +6647,7 @@ package body Exp_Ch6 is
                        Right_Opnd =>
                          Make_Integer_Literal (Loc,
                            Scope_Depth (Enclosing_Dynamic_Scope (Scope_Id)))),
-                   Reason => PE_Accessibility_Check_Failed));
+                   Reason    => PE_Accessibility_Check_Failed));
             end if;
          end;
 
index a3d8f40a9ae5b511eaf7034fa3ef9b28c14aafbb..d44cef2d819a7ac7f71789e776c4c7dd1f8fb459 100644 (file)
@@ -9200,11 +9200,22 @@ package body Sem_Ch8 is
            ("incomplete type from limited view "
             & "cannot appear in use clause", Id);
 
+      --  If the use clause is redundant, Used_Operations will usually be
+      --  empty, but we need to set it to empty here in one case: If we are
+      --  instantiating a generic library unit, then we install the ancestors
+      --  of that unit in the scope stack, which involves reprocessing use
+      --  clauses in those ancestors. Such a use clause will typically have a
+      --  nonempty Used_Operations unless it was redundant in the generic unit,
+      --  even if it is redundant at the place of the instantiation.
+
+      elsif Redundant_Use (Id) then
+         Set_Used_Operations (Parent (Id), New_Elmt_List);
+
       --  If the subtype mark designates a subtype in a different package,
       --  we have to check that the parent type is visible, otherwise the
       --  use type clause is a noop. Not clear how to do that???
 
-      elsif not Redundant_Use (Id) then
+      else
          Set_In_Use (T);
 
          --  If T is tagged, primitive operators on class-wide operands