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
|
diff -urN gcc-4.6.0/gcc/testsuite/gfortran.dg/cray_pointers_8.f90 gcc-4.6.0-fixed/gcc/testsuite/gfortran.dg/cray_pointers_8.f90
--- gcc-4.6.0/gcc/testsuite/gfortran.dg/cray_pointers_8.f90 2009-02-13 15:12:34.000000000 -0600
+++ gcc-4.6.0-fixed/gcc/testsuite/gfortran.dg/cray_pointers_8.f90 1969-12-31 18:00:00.000000000 -0600
@@ -1,63 +0,0 @@
-! { dg-do run }
-! { dg-options "-fcray-pointer" }
-!
-! Test the fix for PR36528 in which the Cray pointer was not passed
-! correctly to 'euler' so that an undefined reference to fcn was
-! generated by the linker.
-!
-! Reported by Tobias Burnus <burnus@gcc.gnu.org>
-! from http://groups.google.com/group/comp.lang.fortran/msg/86b65bad78e6af78
-!
-real function p1(x)
- real, intent(in) :: x
- p1 = x
-end
-
-real function euler(xp,xk,dx,f)
- real, intent(in) :: xp, xk, dx
- interface
- real function f(x)
- real, intent(in) :: x
- end function
- end interface
- real x, y
- y = 0.0
- x = xp
- do while (x .le. xk)
- y = y + f(x)*dx
- x = x + dx
- end do
- euler = y
-end
-program main
- interface
- real function p1 (x)
- real, intent(in) :: x
- end function
- real function fcn (x)
- real, intent(in) :: x
- end function
- real function euler (xp,xk,dx,f)
- real, intent(in) :: xp, xk ,dx
- interface
- real function f(x)
- real, intent(in) :: x
- end function
- end interface
- end function
- end interface
- real x, xp, xk, dx, y, z
- pointer (pfcn, fcn)
- pfcn = loc(p1)
- xp = 0.0
- xk = 1.0
- dx = 0.0005
- y = 0.0
- x = xp
- do while (x .le. xk)
- y = y + fcn(x)*dx
- x = x + dx
- end do
- z = euler(0.0,1.0,0.0005,fcn)
- if (abs (y - z) .gt. 1e-6) call abort
-end
|