2010-07-04 Paul Thomas <pault@gcc.gnu.org>
authorpault <pault@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 4 Jul 2010 14:40:34 +0000 (14:40 +0000)
committerpault <pault@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 4 Jul 2010 14:40:34 +0000 (14:40 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@161801 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/trans-types.c

index c8801b0..3dcb424 100644 (file)
@@ -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
index f4e78c2..1de624f 100644 (file)
@@ -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);