blob: d6a65affdb2d5183a94f479c00808810367a00c9 [file] [log] [blame]
! PR 101320
! { dg-do compile }
!
! TS 29113
! C516 The ALLOCATABLE or POINTER attribute shall not be specified for
! a default-initialized dummy argument of a procedure that has a
! proc-language-binding-spec.
!
! This file contains code that is expected to produce errors.
module m1
type, bind(c) :: t1
integer :: a
integer :: b
end type
type, bind(c) :: t2
integer :: a = 0
integer :: b = -1
end type
end module
module m2
interface
! First test versions with optional attributes on the argument.
! TS29113 removed the constraint disallowing optional arguments
! that previously used to be in C516.
! good, no default initialization, no pointer/allocatable attribute
subroutine s1a (x) bind (c)
use m1
type(t1), optional :: x
end subroutine
! good, no default initialization
subroutine s1b (x) bind (c)
use m1
type(t1), allocatable, optional :: x
end subroutine
! good, no default initialization
subroutine s1c (x) bind (c)
use m1
type(t1), pointer, optional :: x
end subroutine
! good, default initialization but no pointer/allocatable attribute
subroutine s2a (x) bind (c)
use m1
type(t2), optional :: x
end subroutine
! bad, default initialization + allocatable
subroutine s2b (x) bind (c) ! { dg-error "BIND\\(C\\)" }
use m1
type(t2), allocatable, optional :: x
end subroutine
! bad, default initialization + pointer
subroutine s2c (x) bind (c) ! { dg-error "BIND\\(C\\)" }
use m1
type(t2), pointer, optional :: x
end subroutine
! Now do all the same tests without the optional attribute.
! good, no default initialization, no pointer/allocatable attribute
subroutine s3a (x) bind (c)
use m1
type(t1) :: x
end subroutine
! good, no default initialization
subroutine s3b (x) bind (c)
use m1
type(t1), allocatable :: x
end subroutine
! good, no default initialization
subroutine s3c (x) bind (c)
use m1
type(t1), pointer :: x
end subroutine
! good, default initialization but no pointer/allocatable attribute
subroutine s4a (x) bind (c)
use m1
type(t2) :: x
end subroutine
! bad, default initialization + allocatable
subroutine s4b (x) bind (c) ! { dg-error "BIND\\(C\\)" }
use m1
type(t2), allocatable :: x
end subroutine
! bad, default initialization + pointer
subroutine s4c (x) bind (c) ! { dg-error "BIND\\(C\\)" }
use m1
type(t2), pointer :: x
end subroutine
end interface
end module