This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug fortran/54618] [OOP] wrong-code with CLASS(...), INTENT(OUT) -- and OPTIONAL or ALLOCATABLE
- From: "burnus at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 25 Sep 2012 18:37:26 +0000
- Subject: [Bug fortran/54618] [OOP] wrong-code with CLASS(...), INTENT(OUT) -- and OPTIONAL or ALLOCATABLE
- Auto-submitted: auto-generated
- References: <bug-54618-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54618
--- Comment #9 from Tobias Burnus <burnus at gcc dot gnu.org> 2012-09-25 18:37:26 UTC ---
Created attachment 28275
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=28275
Patch for OPTIONAL
This patch fixes the segfaults of the test case in attachment 28269. It also
avoids the copy back of _data/_vptr for class_to_class when it cannot change.
(Note that this patch also fixes the issues of bug 50981 comment 31 and bug
50981 comment 23.)
Still to do:
- Fix CLASS(t), ALLOCATABLE, INTENT(OUT) for arrays (cf. comment 0)
- More test (cf. comment 8 and bug 50981 comment 36)
And the remaining failure of the test case (attachment 28269): For an absent
actual to a1a1,
subroutine a1a1(z)
type(t), optional :: z(:)
call a2(z)
a present PRESENT(x) check in a2 is wrongly .TRUE. The present check is
if (x != 0B && (struct t[0:] *) x->_data.data != 0B)
The problem is that the argument in a1a1 is handled as:
parm.5.data = (void *) &(*z.0)[0];
class.4._data = parm.5;
a2 (&class.4);