aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Thomas <pault@gcc.gnu.org>2010-07-04 14:40:34 +0000
committerPaul Thomas <pault@gcc.gnu.org>2010-07-04 14:40:34 +0000
commitc9dfc4144a464f1ee0306ff388ee85e2c178f18c (patch)
tree096f9841645f1ba083ccf0998dcc00297a52d38e
parent72aa3dcaf5e9aacc00c9ba56e05a750bcbd46415 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/fortran/trans-types.c4
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);