This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug fortran/51052] [OOP] Internal compiler error in gfc_conv_component


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

Tobias Burnus <burnus at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |ice-on-valid-code
                 CC|                            |burnus at gcc dot gnu.org,
                   |                            |janus at gcc dot gnu.org
            Summary|Internal compiler error in  |[OOP] Internal compiler
                   |gfc_conv_component          |error in gfc_conv_component

--- Comment #1 from Tobias Burnus <burnus at gcc dot gnu.org> 2011-11-09 13:03:56 UTC ---
I can confirm the ICE - I get the same with 4.6 and 4.7.

Note, however, that with GCC 4.7 one has to fix the following coding problem
before one can enjoy the internal error:

particles.f90:102.17:
        procedure, pass(particle) &
                 1
Error: Argument mismatch for the overriding procedure 'new_position' at (1):
INTENT mismatch in argument 'particle'


The issue seems to occur for:

    position = position + deltt * velocity + &
               random_displacement

in subroutine position_oil_particle if particles.f90.


The ICE is in gfc_conv_component_ref for:

  if (DECL_FIELD_CONTEXT (field) != TREE_TYPE (decl))
    {
      tree f2 = c->norestrict_decl;
      if (!f2 || DECL_FIELD_CONTEXT (f2) != TREE_TYPE (decl))
        for (f2 = TYPE_FIELDS (TREE_TYPE (decl)); f2; f2 = DECL_CHAIN (f2))

and fails for "TYPE_FIELDS (TREE_TYPE (decl))" with: "internal compiler error:
tree check: expected record_type or union_type or qual_union_type, have
function_type in gfc_conv_component_ref, at fortran/trans-expr.c:556"

This is called by gfc_conv_variable, which is called by get_proc_ptr_comp. The
expression looks as follow

"position%__class_points2d3d_Point2d_p%__vtype_points2d3d_Point2d%__class_points2d3d_Point2d_a%__vtype_points2d3d_Point2d"

At least that's what I get when printing expr->symtree->n.sym->name and
expr->ref{,->next,->next->next,...}->u.c.sym->name.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]