http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47455
--- Comment #2 from Tobias Burnus <burnus at gcc dot gnu.org> 2011-01-25 13:24:39 UTC --- Regarding the regression: FAILS: 2010-05-03-r158988 WORKS: 2010-04-29-r158905 That includes a huge merge by Paul (r158910, 2010-04-29) - seemingly the OOP branch merge. * * * The failure occurs for the assignment in gfc_trans_scalar_assign, which is called by gfc_trans_assignment_1 for: expr1 is BT_DERIVED with "this"->"x" expr2 is EXPR_FUNCTION with "this"->"_vptr"->"find_x" The failure occurs for: 5281 gfc_add_modify (&block, lse->expr, 5282 fold_convert (TREE_TYPE (lse->expr), rse->expr)); If one looks at "rhs->expr.common.type" and "lhs->expr.common.type" both are essentially the same - except that the RHS is a pointer: RHS: <pointer_type 0x2aaaace325e8 type <record_type 0x2aaaaac2fb28 tx BLK LHS: <record_type 0x2aaaaac2fb28 tx BLK In the working version from April 2010, the dump looks like: *this->$data->x = *find_x ((struct .class.t *) this); The "*" on the RHS seems to be missing ...