blob: 90ef299aa920bbf1d6ffb485947bf88bcd4ebe5b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
! { dg-do run }
! Overwrite -pedantic setting:
! { dg-options "-Wall" }
!
! Tests the fix for PR31668, in which %VAL was rejected for
! module and internal procedures.
!
subroutine bmp_write(nx)
implicit none
integer, value :: nx
if(nx /= 10) call abort()
nx = 11
if(nx /= 11) call abort()
end subroutine bmp_write
module x
implicit none
! The following interface does in principle
! not match the procedure (missing VALUE attribute)
! However, this occures in real-world code calling
! C routines where an interface is better than
! "external" only.
interface
subroutine bmp_write(nx)
integer :: nx
end subroutine bmp_write
end interface
contains
SUBROUTINE Grid2BMP(NX)
INTEGER, INTENT(IN) :: NX
if(nx /= 10) call abort()
call bmp_write(%val(nx))
if(nx /= 10) call abort()
END SUBROUTINE Grid2BMP
END module x
! The following test is possible and
! accepted by other compilers, but
! does not make much sense.
! Either one uses VALUE then %VAL is
! not needed or the function will give
! wrong results.
!
!subroutine test()
! implicit none
! integer :: n
! n = 5
! if(n /= 5) call abort()
! call test2(%VAL(n))
! if(n /= 5) call abort()
! contains
! subroutine test2(a)
! integer, value :: a
! if(a /= 5) call abort()
! a = 2
! if(a /= 2) call abort()
! end subroutine test2
!end subroutine test
program main
use x
implicit none
! external test
call Grid2BMP(10)
! call test()
end program main
! { dg-final { cleanup-modules "x" } }
|