summaryrefslogtreecommitdiff
path: root/gcc/ada/freeze.adb
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2007-09-26 10:43:34 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2007-09-26 10:43:34 +0000
commitd8bd83391eb83e037875487d5b200375348c3994 (patch)
tree5c033c0587d20e064772bc364f3412e79a42f858 /gcc/ada/freeze.adb
parentf7ea8d80902bf3432cfc92d4a587e9c86ea584a7 (diff)
downloadgcc-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.adb16
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