diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-09-26 10:43:34 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-09-26 10:43:34 +0000 |
commit | d8bd83391eb83e037875487d5b200375348c3994 (patch) | |
tree | 5c033c0587d20e064772bc364f3412e79a42f858 /gcc/ada/freeze.adb | |
parent | f7ea8d80902bf3432cfc92d4a587e9c86ea584a7 (diff) | |
download | gcc-d8bd83391eb83e037875487d5b200375348c3994.tar.gz |
2007-09-26 Gary Dismukes <dismukes@adacore.com>
* freeze.adb (Freeze_Entity): Remove check for preelaborable
initialization of a full view. This is moved to
Analyze_Package_Specification.
* sem_ch7.adb (Analyze_Package_Specification): Add check for
preelaborable initialization of a full view in entity loop.
(Uninstall_Declarations): If entity is a use-visible compilation unit,
its child units are use-visible only if they are visible child units.
* sem_util.adb (Is_Preelaborable_Expression): New function to determine
whether an expression can be used within a type declaration that
requires preelaborable init.
(Check_Components): Replace inline code that does partial checking for
preelaborable default expressions with call to
Is_Preelaborable_Expression.
(Has_Preelaborable_Initialization): In the case of a generic actual
subtype, (that is, Is_Generic_Actual is True), return the result of
applying Has_Preelaborable_Initialization to the generic actual's base
type.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@128789 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/freeze.adb')
-rw-r--r-- | gcc/ada/freeze.adb | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb index 26e03185bf6..c55d46892fb 100644 --- a/gcc/ada/freeze.adb +++ b/gcc/ada/freeze.adb @@ -2542,15 +2542,13 @@ package body Freeze is -- Case of a type or subtype being frozen else - -- Check preelaborable initialization for full type completing a - -- private type for which pragma Preelaborable_Initialization given. - - if Must_Have_Preelab_Init (E) - and then not Has_Preelaborable_Initialization (E) - then - Error_Msg_N - ("full view of & does not have preelaborable initialization", E); - end if; + -- We used to check here that a full type must have preelaborable + -- initialization if it completes a private type specified with + -- pragma Preelaborable_Intialization, but that missed cases where + -- the types occur within a generic package, since the freezing + -- that occurs within a containing scope generally skips traversal + -- of a generic unit's declarations (those will be frozen within + -- instances). This check was moved to Analyze_Package_Specification. -- The type may be defined in a generic unit. This can occur when -- freezing a generic function that returns the type (which is |