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:
Gary Dismukes 2008-08-22 16:56:32 +02:00 committed by Arnaud Charlet
parent 9b4b0a1ac9
commit 9f4e488138
1 changed files with 14 additions and 8 deletions

View File

@ -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