blob: 88ed2c9d7c9be1c2b81013ad9b9e679b70624f82 [file] [log] [blame]
! { dg-do compile }
! { dg-options "-std=f2003 -fdump-tree-original" }
!
! Covers code introduced by the fix to PR fortran/87923.
! The idea is that the variables in a namelist or I/O list used for
! asynchronous I/O will be marked with the asynchronous attribute.
!
! At this time, "asynchronous" is treated as "volatile" (see trans-decl.c).
! Thus, every variable referenced in an "asynchronous=yes" I/O list
! should obtain the "volatile" specifier in its declaration.
!
implicit none
type t
character(4) :: comp_async
end type
type(t) :: dvar_async
integer :: ivar_async
real :: rvar_async
logical :: lvar_async
integer :: ivar_noasync
namelist /names/ ivar_async, rvar_async, lvar_async
open(1, asynchronous="yes")
write(1, asynchronous="yes") dvar_async
write(1, asynchronous="yes") dvar_async%comp_async
read(1, asynchronous="yes", nml=names)
open(2, asynchronous="no")
read(2, asynchronous="no") ivar_noasync
end
! { dg-final { scan-tree-dump "volatile +struct +\[^ \]+ +dvar_async" "original" } }
! { dg-final { scan-tree-dump "volatile +\[^ \]+ +ivar_async" "original" } }
! { dg-final { scan-tree-dump "volatile +\[^ \]+ +rvar_async" "original" } }
! { dg-final { scan-tree-dump "volatile +\[^ \]+ +lvar_async" "original" } }
! { dg-final { scan-tree-dump-not "volatile +\[^ \]+ +ivar_noasync" "original" } }