http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51610
Bug #: 51610
Summary: [OOP] Class container does not properly handle POINTER
and TARGET
Classification: Unclassified
Product: gcc
Version: 4.7.0
Status: UNCONFIRMED
Keywords: accepts-invalid, rejects-valid
Severity: normal
Priority: P3
Component: fortran
AssignedTo: [email protected]
ReportedBy: [email protected]
CC: [email protected], [email protected]
Blocks: 51605
The following program compiles - but it is invalid.
1. The TARGET attribute is required for "b" and "c"
But if one tries to set it, one gets an error.
Expected: One can mark them as TARGET and without one gets an error
for the CALL.
2. The "ptr => x" is invalid as "x" is not TARGET but no error is printed.
3. If one swaps the "x" and the "z" lines, one gets the error:
ptr => x
1
Error: Non-POINTER in pointer association context (pointer assignment)
But one get also an error for the "ptr => y" and "ptr => z" lines.
Related is PR 51605: SELECT TYPE's associate-name needs to set TARGET attribute
type t
end type t
class(t), allocatable :: a(:), b(:), c(:)
! Bogus error: Error: Duplicate TARGET attribute specified
! target :: a, b, c
allocate (a(1), b(1), c(1))
! Requires: TARGET attribute -
call test(a, b, c) ! possibly not correctly diagnosed
contains
subroutine test(x, y, z)
class(t), pointer, intent(in) :: z(:)
class(t), target :: y(3)
class(t) :: x(3)
class(t), pointer :: ptr(:)
ptr => x ! Invalid: "x" is not a TARGET
ptr => y ! Valid: "x" is a TARGET
ptr => z ! Valid: "z" is a POINTER
end subroutine
end