Bug 97242 - Pointer assignment: Noncontiguous target to contiguous pointer wrongly accepted.
Summary: Pointer assignment: Noncontiguous target to contiguous pointer wrongly accepted.
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: fortran (show other bugs)
Version: 11.0
: P4 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords: accepts-invalid
Depends on:
Blocks:
 
Reported: 2020-09-29 12:12 UTC by Tobias Burnus
Modified: 2020-09-30 13:14 UTC (History)
0 users

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2020-09-30 00:00:00


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Tobias Burnus 2020-09-29 12:12:14 UTC
The lines:
  P => B(i)%A(:,::3,::4)   ! <<<
  P => C(::2,::2,::2)      ! <<<

are wrongly accepted – although the compiler can know that it is invalid → gfc_is_not_contiguous() should detect this.


--------------
implicit none
type t
  integer, allocatable :: A(:,:,:)
end type t

type(t), target :: B(5)
integer, pointer, contiguous :: P(:,:,:)
integer, target :: C(5,5,5)
integer :: i

i = 1

! OK: contiguous
P => B(i)%A
P => B(i)%A(:,:,:)
P => C
P => C(:,:,:)
call foo (B(i)%A)
call foo (B(i)%A(:,:,:))
call foo (C)
call foo (C(:,:,:))

! Invalid - not contiguous
! "If the pointer object has the CONTIGUOUS attribute, the pointer target shall be contiguous."
! → known to be noncontigous (not always checkable, however)
P => B(i)%A(:,::3,::4)   ! <<<
P => C(::2,::2,::2)      ! <<<

! This following is stricter:
! C1541  The actual argument corresponding to a dummy pointer with the
!        CONTIGUOUS attribute shall be simply contiguous (9.5.4).
call foo (B(i)%A(:,::3,::4))  ! { dg-error "must be simply contiguous" }
call foo (C(::2,::2,::2))     ! { dg-error "must be simply contiguous" }

contains
  subroutine foo(Q)
    integer, pointer, intent(in), contiguous :: Q(:,:,:)
  end subroutine foo
end
Comment 1 Tobias Burnus 2020-09-30 13:14:08 UTC
FIXED – but the git-hook script did not add the commit :-(

r11-3556-g65167982efa4dbb96698d026e6d7e17acb513f0a
commit 65167982efa4dbb96698d026e6d7e17acb513f0a
Author: Tobias Burnus <tobias@codesourcery.com>
Date:   Wed Sep 30 15:01:13 2020 +0200

    Fortran: add contiguous check for ptr assignment, fix non-contig check (PR97242)
    
    gcc/fortran/ChangeLog:
    
            PR fortran/97242
            * expr.c (gfc_is_not_contiguous): Fix check.
            (gfc_check_pointer_assign): Use it.
    
    gcc/testsuite/ChangeLog:
    
            PR fortran/97242
            * gfortran.dg/contiguous_11.f90: New test.
            * gfortran.dg/contiguous_4.f90: Update.
            * gfortran.dg/contiguous_7.f90: Update.