diff options
author | Ed Schonberg <schonberg@adacore.com> | 2009-04-15 08:37:21 +0000 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2009-04-15 10:37:21 +0200 |
commit | 28450a75258dfde4f1a590c89156b0c489d4d18c (patch) | |
tree | 971ee2e5a6f70cb1ad95879ad77ee5c2f2c3b28a /gcc | |
parent | 4ff626092ebbea4bceccc9f9fba0bb35b9d22808 (diff) | |
download | gcc-28450a75258dfde4f1a590c89156b0c489d4d18c.zip gcc-28450a75258dfde4f1a590c89156b0c489d4d18c.tar.gz gcc-28450a75258dfde4f1a590c89156b0c489d4d18c.tar.bz2 |
sem_ch3.adb (Analyze_Type_Declaration): Create freeze node for access type even if...
2009-04-15 Ed Schonberg <schonberg@adacore.com>
* sem_ch3.adb (Analyze_Type_Declaration): Create freeze node for access
type even if the designated type comes from a limited_with clause, to
ensure that the symbol for the finalization list of the access type is
created.
From-SVN: r146081
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/ada/sem_ch3.adb | 12 |
2 files changed, 18 insertions, 1 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 10d2f78..d6b4fa8 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,10 @@ +2009-04-15 Ed Schonberg <schonberg@adacore.com> + + * sem_ch3.adb (Analyze_Type_Declaration): Create freeze node for access + type even if the designated type comes from a limited_with clause, to + ensure that the symbol for the finalization list of the access type is + created. + 2009-04-10 Robert Dewar <dewar@adacore.com> * sem_warn.ads, sem_warn.adb (Check_Low_Bound_Tested): Catch more cases diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb index 70d6ceb..620be02 100644 --- a/gcc/ada/sem_ch3.adb +++ b/gcc/ada/sem_ch3.adb @@ -4002,7 +4002,17 @@ package body Sem_Ch3 is Set_First_Subtype_Link (Freeze_Node (B), T); end if; - if not From_With_Type (T) then + -- A type that is imported through a limited_with clause cannot + -- generate any code, and thus need not be frozen. However, an + -- access type with an imported designated type needs a finalization + -- list, which may be referenced in some other package that has + -- non-limited visibility on the designated type. Thus we must + -- create the finalization list at the point the access type is + -- frozen, to prevent unsatisfied references at link time. + + if not From_With_Type (T) + or else Is_Access_Type (T) + then Set_Has_Delayed_Freeze (T); end if; end; |