diff options
author | Paul Thomas <pault@gcc.gnu.org> | 2017-10-02 18:17:39 +0000 |
---|---|---|
committer | Paul Thomas <pault@gcc.gnu.org> | 2017-10-02 18:17:39 +0000 |
commit | da3723a8d5fd122e23d3664c37cb2f63b8b6ebcf (patch) | |
tree | 9bc2d2fccfec8b11b64c98728674df0220d06e67 /gcc/fortran/resolve.c | |
parent | 20a7e14aadb19439b36115bbf8e75ffc70f23501 (diff) | |
download | gcc-da3723a8d5fd122e23d3664c37cb2f63b8b6ebcf.zip gcc-da3723a8d5fd122e23d3664c37cb2f63b8b6ebcf.tar.gz gcc-da3723a8d5fd122e23d3664c37cb2f63b8b6ebcf.tar.bz2 |
re PR fortran/82312 ([OOP] Pointer assignment to component of class variable results wrong vptr for the variable.)
2017-10-02 Paul Thomas <pault@gcc.gnu.org>
PR fortran/82312
* resolve.c (gfc_resolve_code): Simplify condition for class
pointer assignments becoming regular assignments by asserting
that only class valued targets are permitted.
* trans-expr.c (trans_class_pointer_fcn): New function using a
block of code from gfc_trans_pointer_assignment.
(gfc_trans_pointer_assignment): Call the new function. Tidy up
a minor whitespace issue.
2017-10-02 Paul Thomas <pault@gcc.gnu.org>
PR fortran/82312
* gfortran.dg/typebound_proc_36.f90 : New test.
From-SVN: r253362
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r-- | gcc/fortran/resolve.c | 5 |
1 files changed, 1 insertions, 4 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index a3a62de..698cf6d 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -11119,11 +11119,8 @@ start: /* Assigning a class object always is a regular assign. */ if (code->expr2->ts.type == BT_CLASS + && code->expr1->ts.type == BT_CLASS && !CLASS_DATA (code->expr2)->attr.dimension - && !(UNLIMITED_POLY (code->expr2) - && code->expr1->ts.type == BT_DERIVED - && (code->expr1->ts.u.derived->attr.sequence - || code->expr1->ts.u.derived->attr.is_bind_c)) && !(gfc_expr_attr (code->expr1).proc_pointer && code->expr2->expr_type == EXPR_VARIABLE && code->expr2->symtree->n.sym->attr.flavor |