mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-22 15:00:55 +08:00
sem_ch12.ads, [...] (Instantiate_Type): If the formal is a derived type with interface progenitors use the analyzed...
2007-08-14 Ed Schonberg <schonberg@adacore.com> Gary Dismukes <dismukes@adacore.com> Thomas Quinot <quinot@adacore.com> * sem_ch12.ads, sem_ch12.adb (Instantiate_Type): If the formal is a derived type with interface progenitors use the analyzed formal as the parent of the actual, to create renamings for all the inherited operations in Derive_Subprograms. (Collect_Previous_Instances): new procedure within of Load_Parent_Of_Generic, to instantiate all bodies in the compilation unit being loaded, to ensure that the generation of global symbols is consistent in different compilation modes. (Is_Tagged_Ancestor): New function testing the ancestor relation that takes progenitor types into account. (Validate_Derived_Type_Instance): Enforce the rule of 3.9.3(9) by traversing over the primitives of the formal and actual types to locate any abstract subprograms of the actual type that correspond to a nonabstract subprogram of the formal type's ancestor type(s), and issue an error if such is found. (Analyze_Package_Instantiation, Analyze_Subprogram_Instantiation, Instantiate_Package_Body, Instantiate_Subprogram_Body): Remove bogus guard around calls to Inherit_Context. (Reset_Entity): If the entity is the selector of a selected component that denotes a named number, propagate constant-folding to the generic template only if the named number is global to the generic unit. (Set_Instance_Env): Only reset the compilation switches when compiling a predefined or internal unit. From-SVN: r127443
This commit is contained in:
parent
1d6f10a194
commit
1c0ce9d83b
File diff suppressed because it is too large
Load Diff
@ -6,7 +6,7 @@
|
||||
-- --
|
||||
-- S p e c --
|
||||
-- --
|
||||
-- Copyright (C) 1992-2006, Free Software Foundation, Inc. --
|
||||
-- Copyright (C) 1992-2007, Free Software Foundation, Inc. --
|
||||
-- --
|
||||
-- GNAT is free software; you can redistribute it and/or modify it under --
|
||||
-- terms of the GNU General Public License as published by the Free Soft- --
|
||||
@ -58,8 +58,7 @@ package Sem_Ch12 is
|
||||
function Copy_Generic_Node
|
||||
(N : Node_Id;
|
||||
Parent_Id : Node_Id;
|
||||
Instantiating : Boolean)
|
||||
return Node_Id;
|
||||
Instantiating : Boolean) return Node_Id;
|
||||
-- Copy the tree for a generic unit or its body. The unit is copied
|
||||
-- repeatedly: once to produce a copy on which semantic analysis of
|
||||
-- the generic is performed, and once for each instantiation. The tree
|
||||
@ -76,11 +75,30 @@ package Sem_Ch12 is
|
||||
-- of the ancestors of a child generic that is being instantiated.
|
||||
|
||||
procedure Instantiate_Package_Body
|
||||
(Body_Info : Pending_Body_Info;
|
||||
Inlined_Body : Boolean := False);
|
||||
(Body_Info : Pending_Body_Info;
|
||||
Inlined_Body : Boolean := False;
|
||||
Body_Optional : Boolean := False);
|
||||
-- Called after semantic analysis, to complete the instantiation of
|
||||
-- package instances. The flag Inlined_Body is set if the body is
|
||||
-- being instantiated on the fly for inlined purposes.
|
||||
--
|
||||
-- The flag Body_Optional indicates that the call is for an instance
|
||||
-- that precedes the current instance in the same declarative part.
|
||||
-- This call is needed when instantiating a nested generic whose body
|
||||
-- is to be found in the body of an instance. Normally we instantiate
|
||||
-- package bodies only when they appear in the main unit, or when their
|
||||
-- contents are needed for a nested generic G. If unit U contains several
|
||||
-- instances I1, I2, etc. and I2 contains a nested generic, then when U
|
||||
-- appears in the context of some other unit P that contains an instance
|
||||
-- of G, we compile the body of I2, but not that of I1. However, when we
|
||||
-- compile U as the main unit, we compile both bodies. This will lead to
|
||||
-- lead to link-time errors if the compilation of I1 generates public
|
||||
-- symbols, because those in I2 will receive different names in both
|
||||
-- cases. This forces us to analyze the body of I1 even when U is not the
|
||||
-- main unit. We don't want this additional mechanism to generate an error
|
||||
-- when the body of the generic for I1 is not present, and this is the
|
||||
-- reason for the presence of the flag Body_Optional, which is exchanged
|
||||
-- between the current procedure and Load_Parent_Of_Generic.
|
||||
|
||||
procedure Instantiate_Subprogram_Body
|
||||
(Body_Info : Pending_Body_Info);
|
||||
|
Loading…
x
Reference in New Issue
Block a user