diff options
author | Paul Thomas <pault@gcc.gnu.org> | 2010-07-04 14:40:34 +0000 |
---|---|---|
committer | Paul Thomas <pault@gcc.gnu.org> | 2010-07-04 14:40:34 +0000 |
commit | c9dfc4144a464f1ee0306ff388ee85e2c178f18c (patch) | |
tree | 096f9841645f1ba083ccf0998dcc00297a52d38e | |
parent | 72aa3dcaf5e9aacc00c9ba56e05a750bcbd46415 (diff) | |
download | gcc-c9dfc4144a464f1ee0306ff388ee85e2c178f18c.zip gcc-c9dfc4144a464f1ee0306ff388ee85e2c178f18c.tar.gz gcc-c9dfc4144a464f1ee0306ff388ee85e2c178f18c.tar.bz2 |
re PR fortran/44596 ([OOP] Dynamic dispatch uses broken types)
2010-07-04 Paul Thomas <pault@gcc.gnu.org>
PR fortran/44596
PR fortran/44745
* trans-types.c (gfc_get_derived_type): Derived type fields
with the vtype attribute must have TYPE_REF_CAN_ALIAS_ALL set.
From-SVN: r161801
-rw-r--r-- | gcc/fortran/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/fortran/trans-types.c | 4 |
2 files changed, 11 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index c8801b0..3dcb424 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2010-07-04 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/44596 + PR fortran/44745 + * trans-types.c (gfc_get_derived_type): Derived type fields + with the vtype attribute must have TYPE_REF_CAN_ALIAS_ALL set. + 2010-07-02 Mikael Morin <mikael@gcc.gnu.org> PR fortran/44662 diff --git a/gcc/fortran/trans-types.c b/gcc/fortran/trans-types.c index f4e78c2..1de624f 100644 --- a/gcc/fortran/trans-types.c +++ b/gcc/fortran/trans-types.c @@ -2152,6 +2152,10 @@ gfc_get_derived_type (gfc_symbol * derived) && !c->attr.proc_pointer) field_type = build_pointer_type (field_type); + /* vtype fields can point to different types to the base type. */ + if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.vtype) + TYPE_REF_CAN_ALIAS_ALL (field_type) = true; + field = gfc_add_field_to_struct (&fieldlist, typenode, get_identifier (c->name), field_type, &chain); |