[Bug fortran/54990] [4.8 Regression] [OOP] ICE in tree_operand_check on SELECT TYPE

pault at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Sun Dec 16 15:27:00 GMT 2012


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

Paul Thomas <pault at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2012-12-16
                 CC|                            |pault at gcc dot gnu.org
         AssignedTo|unassigned at gcc dot       |pault at gcc dot gnu.org
                   |gnu.org                     |
     Ever Confirmed|0                           |1

--- Comment #1 from Paul Thomas <pault at gcc dot gnu.org> 2012-12-16 15:27:24 UTC ---
trans-expr.c:203

tree
gfc_get_vptr_from_expr (tree expr)
{
  tree tmp = expr;
  while (tmp && !GFC_CLASS_TYPE_P (TREE_TYPE (tmp)))
    tmp = TREE_OPERAND (tmp, 0);
  tmp = gfc_class_vptr_get (tmp);
  return tmp;
}

is changed to

tree
gfc_get_vptr_from_expr (tree expr)
{
  tree tmp = expr;
  while (tmp && !GFC_CLASS_TYPE_P (TREE_TYPE (tmp))
     && !(TYPE_CANONICAL (TREE_TYPE (tmp))
          && GFC_CLASS_TYPE_P (TYPE_CANONICAL (TREE_TYPE (tmp)))))
    tmp = TREE_OPERAND (tmp, 0);
  tmp = gfc_class_vptr_get (tmp);
  return tmp;
}

the bug is fixed.  The array reference seems to spin a new TREE_TYPE for the
class container that does not get marked as GFC_CLASS_TYPE_P.  I have no idea
why or what might have changed it.

As soon as I get the unlimited polymorphic patch committed, I will submit this
as a patch with the testcase:

program test
  implicit none
  type :: ncBhStd
    integer :: i
  end type
  type :: tn
    class (ncBhStd), allocatable, dimension(:) :: cBh
  end type
  integer :: i
  type(tn), target :: a
  allocate (a%cBh(2), source = [(ncBhStd(i*99), i = 1,2)])
  select type (q => a%cBh(1))
    type is (ncBhStd)
      if (q%i .ne. 99) call abort
  end select

end



More information about the Gcc-bugs mailing list