[Bug fortran/53876] [4.8 Regression] [OOP] ICE with class array
pault at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sat Dec 15 16:27:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53876
Paul Thomas <pault at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |pault at gcc dot gnu.org
AssignedTo|unassigned at gcc dot |pault at gcc dot gnu.org
|gnu.org |
--- Comment #4 from Paul Thomas <pault at gcc dot gnu.org> 2012-12-15 16:27:12 UTC ---
Tobias,
Your analysis is completely correct.
>
> /* Set the data. */
> ctree = gfc_class_data_get (var);
Inserting
parmse->expr = fold_convert (TREE_TYPE (ctree), parmse->expr);
before this line fixes the problem.
> gfc_add_modify (&parmse->pre, ctree, parmse->expr);
>
>
....snip...
> The problem is that the LHS and the RHS have a different type. Both are
> pointers to a record_type, which contains "genes" (type "array1_real(kind=4)")
> as component.
>
> However, the decl for both the record type and the "genes" type is different
> (only their respective canonical type is the same).
which is why the above works.
> I wonder whether it has something to do with restricted and not. (See also PR
> 45586). Though, as marking all variables as TARGET doesn't help, I might also
> be off track.
I will try to understand why the regression occurred. However, the above fix
is perfectly OK.
The testcase of comment 2 works with the above. The original needs a call to
the constructor before the assignment in the main program to avoid the runtime
fault.
After I have got the unlimited polymorphic patch out of the way, I will submit
this fix (my tree is too poluted right no :-) )
Cheers
Paul
More information about the Gcc-bugs
mailing list