sem_util.adb (Has_Preelaborable_Initialization): Revise checking of private types to allow for types derived from a private type...
2008-08-22 Gary Dismukes <dismukes@adacore.com> * sem_util.adb (Has_Preelaborable_Initialization): Revise checking of private types to allow for types derived from a private type with preelaborable initialization, but return False for a private extension (unless it has the pragma). From-SVN: r139480
This commit is contained in:
parent
9b4b0a1ac9
commit
9f4e488138
|
@ -4616,14 +4616,6 @@ package body Sem_Util is
|
|||
return Has_Preelaborable_Initialization (Base_Type (E));
|
||||
end if;
|
||||
|
||||
-- Other private types never have preelaborable initialization
|
||||
|
||||
if Is_Private_Type (E) then
|
||||
return False;
|
||||
end if;
|
||||
|
||||
-- Here for all non-private view
|
||||
|
||||
-- All elementary types have preelaborable initialization
|
||||
|
||||
if Is_Elementary_Type (E) then
|
||||
|
@ -4643,6 +4635,13 @@ package body Sem_Util is
|
|||
|
||||
elsif Is_Derived_Type (E) then
|
||||
|
||||
-- If the derived type is a private extension then it doesn't have
|
||||
-- preelaborable initialization.
|
||||
|
||||
if Ekind (Base_Type (E)) = E_Record_Type_With_Private then
|
||||
return False;
|
||||
end if;
|
||||
|
||||
-- First check whether ancestor type has preelaborable initialization
|
||||
|
||||
Has_PE := Has_Preelaborable_Initialization (Etype (Base_Type (E)));
|
||||
|
@ -4663,6 +4662,13 @@ package body Sem_Util is
|
|||
Has_PE := False;
|
||||
end if;
|
||||
|
||||
-- Private types not derived from a type having preelaborable init and
|
||||
-- that are not marked with pragma Preelaborable_Initialization do not
|
||||
-- have preelaborable initialization.
|
||||
|
||||
elsif Is_Private_Type (E) then
|
||||
return False;
|
||||
|
||||
-- Record type has PI if it is non private and all components have PI
|
||||
|
||||
elsif Is_Record_Type (E) then
|
||||
|
|
Loading…
Reference in New Issue