diff mbox

[Ada] Spurious warning on generated with_clause for renamed unit

Message ID 20140801102328.GA8468@adacore.com
State New
Headers show

Commit Message

Arnaud Charlet Aug. 1, 2014, 10:23 a.m. UTC
This patch suppresses spurious warnings that may be generated when the prefix
of a with_clause for a child unit denotes the renaming of a parent unit.
Such renamings generate internal with_clauses that are not marked Implicit_With
because they must be properly installed as part of the context, but they are
never redundant with explicit with_clauses.

The following must compile quietly:

   gcc -c -gnatwa pkg_b2.adb

---
with Renamed_Pkg_A;
package Pkg_B2
is
   procedure Proc_1( Val_1 : in out Renamed_Pkg_A.Type_A );
end Pkg_B2;
---
package Pkg_A
is
   type Type_A is ( A1, A2 );
end Pkg_A;
---
with Pkg_A;
package Renamed_Pkg_A renames Pkg_A;
---
package Pkg_A.Child_A
is
   type Type_B is ( B1, B2 );
end Pkg_A.Child_A;
---
with Renamed_Pkg_A.Child_A;
package body Pkg_B2
is
   use type Renamed_Pkg_A.Child_A.Type_B;

   Val_B : Renamed_Pkg_A.Child_A.Type_B := Renamed_Pkg_A.Child_A.Type_B'First;
   
   procedure Proc_1( Val_1 : in out Renamed_Pkg_A.Type_A )
   is
   begin
      if Val_B = Renamed_Pkg_A.Child_A.Type_B'First then
         Val_1 := Renamed_Pkg_A.Type_A'Last;
         Val_B := Renamed_Pkg_A.Child_A.Type_B'Last;
      else 
         Val_B := Renamed_Pkg_A.Child_A.Type_B'First;
      end if;
   end Proc_1;
end Pkg_B2;

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

2014-08-01  Ed Schonberg  <schonberg@adacore.com>

	* sem_ch10.adb (Analyze_Compilation_Unit): Do not place a
	warning on a with_clause created for the renaming of a parent
	unit in an explicit with_clause.
diff mbox

Patch

Index: sem_ch10.adb
===================================================================
--- sem_ch10.adb	(revision 213440)
+++ sem_ch10.adb	(working copy)
@@ -242,7 +242,7 @@ 
    --  on the context. Note that in contrast with the handling of private
    --  types, the limited view and the non-limited view of a type are treated
    --  as separate entities, and no entity exchange needs to take place, which
-   --  makes the implementation must simpler than could be feared.
+   --  makes the implementation much simpler than could be feared.
 
    ------------------------------
    -- Analyze_Compilation_Unit --
@@ -507,11 +507,15 @@ 
 
             --  Avoid checking implicitly generated with clauses, limited with
             --  clauses or withs that have pragma Elaborate or Elaborate_All.
+            --  With_clauses introduced for renamings of parent clauses are not
+            --  marked implicit because they need to be properly installed, but
+            --  they do not come from source and do not require warnings.
 
             if Nkind (Clause) = N_With_Clause
               and then not Implicit_With (Clause)
               and then not Limited_Present (Clause)
               and then not Elaborate_Present (Clause)
+              and then Comes_From_Source (Clause)
             then
                --  Package body-to-spec check