[Bug fortran/55978] [4.8 Regression] class_optional_2.f90 -Os fails

burnus at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Feb 6 12:17:00 GMT 2013


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

--- Comment #19 from Tobias Burnus <burnus at gcc dot gnu.org> 2013-02-06 12:17:14 UTC ---
(In reply to comment #18)
> Here is an updated patch, which works for pointers and pointer components,

Seems to work better than I expected. However, there is still an issue for:

integer, pointer :: p(:) => null()
call one(p) ! OK
call one()  ! Segfault
contains
subroutine one(x)
  integer, pointer, optional :: x(:)
  call two(x)
end subroutine one
subroutine two(x)
  integer, optional :: x(*)
  if (present(x)) print *, x(1)
end subroutine two
end


That generates the code:
    D.1896 = x != 0B
             ? (struct array1_integer(kind=4) *) _gfortran_internal_pack (x)
             : 0B;
    two (D.1896);
    if (x != 0B
        && (integer(kind=4)[0:] *) x->data != (integer(kind=4)[0:] *) D.1896)

I think it should be "x != 0B && x->data != 0B" in the first condition.



More information about the Gcc-bugs mailing list