------- Comment #2 from pault at gcc dot gnu dot org  2006-09-18 07:49 -------
This fixes it:

Index: gcc/fortran/resolve.c
===================================================================
*** gcc/fortran/resolve.c       (revision 117013)
--- gcc/fortran/resolve.c       (working copy)
*************** resolve_structure_cons (gfc_expr * expr)
*** 608,613 ****
--- 608,625 ----
          continue;
        }

+       if (comp->pointer
+           && !((cons->expr->expr_type == EXPR_VARIABLE
+                       || cons->expr->expr_type == EXPR_VARIABLE)
+                 && (cons->expr->symtree->n.sym->attr.pointer
+                       || cons->expr->symtree->n.sym->attr.target)))
+       {
+         t = FAILURE;
+         gfc_error ("The element in the derived type constructor at %L, "
+                    "for pointer component '%s' should be a POINTER or "
+                    "a TARGET", &cons->expr->where, comp->name);
+       }
+
        /* If we don't have the right type, try to convert it.  */

        if (!gfc_compare_types (&cons->expr->ts, &comp->ts))

I have yet to regtest or to write a suitable testcase.

Paul


-- 

pault at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         AssignedTo|unassigned at gcc dot gnu   |pault at gcc dot gnu dot org
                   |dot org                     |
             Status|NEW                         |ASSIGNED
   Last reconfirmed|2006-09-17 15:32:08         |2006-09-18 07:49:34
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29115

Reply via email to