------- Comment #3 from burnus at gcc dot gnu dot org  2006-11-13 21:18 -------
Funny enough, gfortran does not crash when one reverts the order of point and
plane.

Debug information:

In trans-expr.c's gfc_trans_scalar_assign
      gfc_add_block_to_block (&block, &lse->pre);
      gfc_add_block_to_block (&block, &rse->pre);
      gfc_add_modify_expr (&block, lse->expr,
                           fold_convert (TREE_TYPE (lse->expr), rse->expr));

Where TREE_TYPE (lse->expr) and TREE_TYPE (rse->expr) are:
(gdb) p rse->expr->common.type->common.code
$4 = RECORD_TYPE
(gdb) p lse->expr->common.type->common.code
$5 = RECORD_TYPE

And in fold_convert:

fold_convert (tree type, tree arg)
{
  tree orig = TREE_TYPE (arg);
  tree tem;
  if (type == orig)
    return arg;

(gdb) p arg->common.type # TREE_TYPE (arg) == orig
$14 = (tree) 0x2b3117d25c60
(gdb) p type  # type
$15 = (tree) 0x2b3117d25a50

Thus the first "if" does not match. As RECORD_TYPE is not supported (except for
that if), the ICE happens.


-- 

burnus at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |burnus at gcc dot gnu dot
                   |                            |org
           Keywords|                            |ice-on-valid-code


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

Reply via email to