1*31ad5c14SArnamoy Bhattacharyya! RUN: %flang_fc1 -fdebug-unparse-with-symbols -DSTRICT_F18 -pedantic %s 2>&1 | FileCheck %s 2*31ad5c14SArnamoy Bhattacharyya! RUN: %flang_fc1 -fdebug-unparse-with-symbols -DARCHAIC_FORTRAN %s 2>&1 | FileCheck %s 305756e69STim Keith! CHECK-NOT: :{{[[:space:]]}}error:{{[[:space:]]}} 49c98ed9cSRichard Barton! FIXME: the above check line does not work because diags are not emitted with error: in them. 564ab3302SCarolineConcatto 664ab3302SCarolineConcatto! these are the conformance tests 764ab3302SCarolineConcatto! define STRICT_F18 to eliminate tests of features not in F18 864ab3302SCarolineConcatto! define ARCHAIC_FORTRAN to add test of feature found in Fortran before F95 964ab3302SCarolineConcatto 1064ab3302SCarolineConcattosubroutine sub00(a,b,n,m) 1164ab3302SCarolineConcatto integer :: n, m 1264ab3302SCarolineConcatto real a(n) 1364ab3302SCarolineConcatto real :: b(m) 1464ab3302SCarolineConcatto1 print *, n, m 1564ab3302SCarolineConcatto1234 print *, a(n), b(1) 1664ab3302SCarolineConcatto99999 print *, a(1), b(m) 1764ab3302SCarolineConcattoend subroutine sub00 1864ab3302SCarolineConcatto 1964ab3302SCarolineConcattosubroutine do_loop01(a,n) 2064ab3302SCarolineConcatto integer :: n 2164ab3302SCarolineConcatto real, dimension(n) :: a 2264ab3302SCarolineConcatto do 10 i = 1, n 2364ab3302SCarolineConcatto print *, i, a(i) 2464ab3302SCarolineConcatto10 continue 2564ab3302SCarolineConcattoend subroutine do_loop01 2664ab3302SCarolineConcatto 2764ab3302SCarolineConcattosubroutine do_loop02(a,n) 2864ab3302SCarolineConcatto integer :: n 2964ab3302SCarolineConcatto real, dimension(n,n) :: a 3064ab3302SCarolineConcatto do 10 j = 1, n 3164ab3302SCarolineConcatto do 10 i = 1, n 3264ab3302SCarolineConcatto print *, i, j, a(i, j) 3364ab3302SCarolineConcatto10 continue 3464ab3302SCarolineConcattoend subroutine do_loop02 3564ab3302SCarolineConcatto 3664ab3302SCarolineConcatto#ifndef STRICT_F18 3764ab3302SCarolineConcattosubroutine do_loop03(a,n) 3864ab3302SCarolineConcatto integer :: n 3964ab3302SCarolineConcatto real, dimension(n) :: a 4064ab3302SCarolineConcatto do 10 i = 1, n 4164ab3302SCarolineConcatto10 print *, i, a(i) ! extension (not f18) 4264ab3302SCarolineConcattoend subroutine do_loop03 4364ab3302SCarolineConcatto 4464ab3302SCarolineConcattosubroutine do_loop04(a,n) 4564ab3302SCarolineConcatto integer :: n 4664ab3302SCarolineConcatto real :: a(n,n) 4764ab3302SCarolineConcatto do 10 j = 1, n 4864ab3302SCarolineConcatto do 10 i = 1, n 4964ab3302SCarolineConcatto10 print *, i, j, a(i, j) ! extension (not f18) 5064ab3302SCarolineConcattoend subroutine do_loop04 5164ab3302SCarolineConcatto 5264ab3302SCarolineConcattosubroutine do_loop05(a,n) 5364ab3302SCarolineConcatto integer :: n 5464ab3302SCarolineConcatto real a(n,n,n) 5564ab3302SCarolineConcatto do 10 k = 1, n 5664ab3302SCarolineConcatto do 10 j = 1, n 5764ab3302SCarolineConcatto do 10 i = 1, n 5864ab3302SCarolineConcatto10 print *, a(i, j, k) ! extension (not f18) 5964ab3302SCarolineConcattoend subroutine do_loop05 6064ab3302SCarolineConcatto#endif 6164ab3302SCarolineConcatto 6264ab3302SCarolineConcattosubroutine do_loop06(a,n) 6364ab3302SCarolineConcatto integer :: n 6464ab3302SCarolineConcatto real, dimension(n) :: a 6564ab3302SCarolineConcatto loopname: do i = 1, n 6664ab3302SCarolineConcatto print *, i, a(i) 6764ab3302SCarolineConcatto if (i .gt. 50) then 6864ab3302SCarolineConcatto678 exit 6964ab3302SCarolineConcatto end if 7064ab3302SCarolineConcatto end do loopname 7164ab3302SCarolineConcattoend subroutine do_loop06 7264ab3302SCarolineConcatto 7364ab3302SCarolineConcattosubroutine do_loop07(a,n) 7464ab3302SCarolineConcatto integer :: n 7564ab3302SCarolineConcatto real, dimension(n,n) :: a 7664ab3302SCarolineConcatto loopone: do j = 1, n 7764ab3302SCarolineConcatto looptwo: do i = 1, n 7864ab3302SCarolineConcatto print *, i, j, a(i, j) 7964ab3302SCarolineConcatto end do looptwo 8064ab3302SCarolineConcatto end do loopone 8164ab3302SCarolineConcattoend subroutine do_loop07 8264ab3302SCarolineConcatto 839c98ed9cSRichard Barton#ifndef STRICT_F18 8464ab3302SCarolineConcattosubroutine do_loop08(a,b,n,m,nn) 8564ab3302SCarolineConcatto integer :: n, m, nn 8664ab3302SCarolineConcatto real, dimension(n,n) :: a 8764ab3302SCarolineConcatto real b(m,nn) 8864ab3302SCarolineConcatto loopone: do j = 1, n 8964ab3302SCarolineConcatto condone: if (m .lt. n) then 9064ab3302SCarolineConcatto looptwo: do i = 1, m 9164ab3302SCarolineConcatto condtwo: if (n .lt. nn) then 9264ab3302SCarolineConcatto b(m-i,j) = s(m-i,j) 9364ab3302SCarolineConcatto if (i .eq. j) then 9464ab3302SCarolineConcatto goto 111 9564ab3302SCarolineConcatto end if 9664ab3302SCarolineConcatto else 9764ab3302SCarolineConcatto cycle loopone 9864ab3302SCarolineConcatto end if condtwo 9964ab3302SCarolineConcatto end do looptwo 10064ab3302SCarolineConcatto else if (n .lt. m) then 10164ab3302SCarolineConcatto loopthree: do i = 1, n 10264ab3302SCarolineConcatto condthree: if (n .lt. nn) then 10364ab3302SCarolineConcatto a(i,j) = b(i,j) 10464ab3302SCarolineConcatto if (i .eq. j) then 10564ab3302SCarolineConcatto return 10664ab3302SCarolineConcatto end if 10764ab3302SCarolineConcatto else 10864ab3302SCarolineConcatto exit loopthree 10964ab3302SCarolineConcatto end if condthree 11064ab3302SCarolineConcatto end do loopthree 11164ab3302SCarolineConcatto end if condone 11264ab3302SCarolineConcatto end do loopone 11364ab3302SCarolineConcatto111 print *, "done" 11464ab3302SCarolineConcattoend subroutine do_loop08 1159c98ed9cSRichard Barton#endif 11664ab3302SCarolineConcatto 11764ab3302SCarolineConcatto#ifndef STRICT_F18 11864ab3302SCarolineConcatto! extended ranges supported by PGI, gfortran gives warnings 11964ab3302SCarolineConcattosubroutine do_loop09(a,n,j) 12064ab3302SCarolineConcatto integer :: n 12164ab3302SCarolineConcatto real a(n) 12264ab3302SCarolineConcatto goto 400 12364ab3302SCarolineConcatto200 print *, "found the index", j 12464ab3302SCarolineConcatto print *, "value at", j, "is", a(j) 125*31ad5c14SArnamoy Bhattacharyya goto 300 ! FIXME: emits diagnostic even without -pedantic 12664ab3302SCarolineConcatto400 do 100 i = 1, n 12764ab3302SCarolineConcatto if (i .eq. j) then 12864ab3302SCarolineConcatto goto 200 ! extension: extended GOTO ranges 12964ab3302SCarolineConcatto300 continue 13064ab3302SCarolineConcatto else 13164ab3302SCarolineConcatto print *, a(i) 13264ab3302SCarolineConcatto end if 13364ab3302SCarolineConcatto100 end do 13464ab3302SCarolineConcatto500 continue 13564ab3302SCarolineConcattoend subroutine do_loop09 13664ab3302SCarolineConcatto#endif 13764ab3302SCarolineConcatto 13864ab3302SCarolineConcattosubroutine goto10(a,b,n) 13964ab3302SCarolineConcatto dimension :: a(3), b(3) 14064ab3302SCarolineConcatto goto 10 14164ab3302SCarolineConcatto10 print *,"x" 14264ab3302SCarolineConcatto4 labelit: if (a(n-1) .ne. b(n-2)) then 14364ab3302SCarolineConcatto goto 567 14464ab3302SCarolineConcatto end if labelit 14564ab3302SCarolineConcatto567 end subroutine goto10 14664ab3302SCarolineConcatto 14764ab3302SCarolineConcattosubroutine computed_goto11(i,j,k) 14864ab3302SCarolineConcatto goto (100,110,120) i 14964ab3302SCarolineConcatto100 print *, j 15064ab3302SCarolineConcatto goto 200 15164ab3302SCarolineConcatto110 print *, k 15264ab3302SCarolineConcatto goto 200 15364ab3302SCarolineConcatto120 print *, -1 15464ab3302SCarolineConcatto200 end subroutine computed_goto11 15564ab3302SCarolineConcatto 15664ab3302SCarolineConcatto#ifndef STRICT_F18 15764ab3302SCarolineConcattosubroutine arith_if12(i) 15864ab3302SCarolineConcatto if (i) 300,310,320 15964ab3302SCarolineConcatto300 continue 16064ab3302SCarolineConcatto print *,"<" 16164ab3302SCarolineConcatto goto 340 16264ab3302SCarolineConcatto310 print *,"==" 16364ab3302SCarolineConcatto340 goto 330 16464ab3302SCarolineConcatto320 print *,">" 16564ab3302SCarolineConcatto330 goto 350 16664ab3302SCarolineConcatto350 continue 16764ab3302SCarolineConcattoend subroutine arith_if12 16864ab3302SCarolineConcatto#endif 16964ab3302SCarolineConcatto 1709c98ed9cSRichard Barton#ifndef STRICT_F18 17164ab3302SCarolineConcattosubroutine alt_return_spec13(i,*,*,*) 17264ab3302SCarolineConcatto9 continue 17364ab3302SCarolineConcatto8 labelme: if (i .lt. 42) then 17464ab3302SCarolineConcatto7 return 1 17564ab3302SCarolineConcatto6 else if (i .lt. 94) then 17664ab3302SCarolineConcatto5 return 2 17764ab3302SCarolineConcatto4 else if (i .lt. 645) then 17864ab3302SCarolineConcatto3 return 3 17964ab3302SCarolineConcatto2 end if labelme 18064ab3302SCarolineConcatto1 end subroutine alt_return_spec13 18164ab3302SCarolineConcatto 18264ab3302SCarolineConcattosubroutine alt_return_spec14(i) 18364ab3302SCarolineConcatto call alt_return_spec13(i,*6000,*6130,*6457) 18464ab3302SCarolineConcatto print *, "Hi!" 18564ab3302SCarolineConcatto6000 continue 18664ab3302SCarolineConcatto6100 print *,"123" 18764ab3302SCarolineConcatto6130 continue 18864ab3302SCarolineConcatto6400 print *,"abc" 18964ab3302SCarolineConcatto6457 continue 19064ab3302SCarolineConcatto6650 print *,"!@#" 19164ab3302SCarolineConcattoend subroutine alt_return_spec14 19264ab3302SCarolineConcatto#endif 19364ab3302SCarolineConcatto 1949c98ed9cSRichard Barton#ifndef STRICT_F18 19564ab3302SCarolineConcattosubroutine specifiers15(a,b,x) 19664ab3302SCarolineConcatto integer x 19764ab3302SCarolineConcatto OPEN (10, file="myfile.dat", err=100) 19864ab3302SCarolineConcatto READ (10,20,end=200,size=x,advance='no',eor=300) a 19964ab3302SCarolineConcatto goto 99 20064ab3302SCarolineConcatto99 CLOSE (10) 20164ab3302SCarolineConcatto goto 40 20264ab3302SCarolineConcatto100 print *,"error opening" 20364ab3302SCarolineConcatto101 return 20464ab3302SCarolineConcatto200 print *,"end of file" 20564ab3302SCarolineConcatto202 return 20664ab3302SCarolineConcatto300 print *, "end of record" 20764ab3302SCarolineConcatto303 return 20864ab3302SCarolineConcatto20 FORMAT (1x,F5.1) 20964ab3302SCarolineConcatto30 FORMAT (2x,F6.2) 21064ab3302SCarolineConcatto40 OPEN (11, file="myfile2.dat", err=100) 21164ab3302SCarolineConcatto goto 50 21264ab3302SCarolineConcatto50 WRITE (11,30,err=100) b 21364ab3302SCarolineConcatto CLOSE (11) 21464ab3302SCarolineConcattoend subroutine specifiers15 2159c98ed9cSRichard Barton#endif 21664ab3302SCarolineConcatto 21764ab3302SCarolineConcatto#if !defined(STRICT_F18) && defined(ARCHAIC_FORTRAN) 21864ab3302SCarolineConcatto! assigned goto was deleted in F95. PGI supports, gfortran gives warnings 21964ab3302SCarolineConcattosubroutine assigned_goto16 22064ab3302SCarolineConcatto assign 10 to i 22164ab3302SCarolineConcatto goto i (10, 20, 30) 22264ab3302SCarolineConcatto10 continue 22364ab3302SCarolineConcatto assign 20 to i 22464ab3302SCarolineConcatto20 continue 22564ab3302SCarolineConcatto assign 30 to i 22664ab3302SCarolineConcatto30 pause 22764ab3302SCarolineConcatto print *, "archaic feature!" 22864ab3302SCarolineConcattoend subroutine assigned_goto16 22964ab3302SCarolineConcatto#endif 230