| ! RUN: %python %S/test_errors.py %s %flang_fc1 -pedantic |
| ! !DIR$ IGNORE_TKR tests |
| |
| !ERROR: !DIR$ IGNORE_TKR directive must appear in a subroutine or function |
| !dir$ ignore_tkr |
| |
| module m |
| |
| !ERROR: !DIR$ IGNORE_TKR directive must appear in a subroutine or function |
| !dir$ ignore_tkr |
| |
| interface |
| subroutine t1(x) |
| !dir$ ignore_tkr |
| real, intent(in) :: x |
| end |
| |
| subroutine t2(x) |
| !dir$ ignore_tkr(t) x |
| real, intent(in) :: x |
| end |
| |
| subroutine t3(x) |
| !dir$ ignore_tkr(k) x |
| real, intent(in) :: x |
| end |
| |
| subroutine t4(a) |
| !dir$ ignore_tkr(r) a |
| real, intent(in) :: a(2) |
| end |
| |
| subroutine t5(m) |
| !dir$ ignore_tkr(r) m |
| real, intent(in) :: m(2,2) |
| end |
| |
| subroutine t6(x) |
| !dir$ ignore_tkr(a) x |
| real, intent(in) :: x |
| end |
| |
| subroutine t7(x) |
| !ERROR: !DIR$ IGNORE_TKR directive may not have an empty parenthesized list of letters |
| !dir$ ignore_tkr() x |
| real, intent(in) :: x |
| end |
| |
| subroutine t8(x) |
| !dir$ ignore_tkr x |
| real, intent(in) :: x |
| end |
| |
| subroutine t9(x) |
| !dir$ ignore_tkr x |
| !WARNING: !DIR$ IGNORE_TKR should not apply to an allocatable or pointer |
| real, intent(in), allocatable :: x |
| end |
| |
| subroutine t10(x) |
| !dir$ ignore_tkr x |
| !WARNING: !DIR$ IGNORE_TKR should not apply to an allocatable or pointer |
| real, intent(in), pointer :: x |
| end |
| |
| subroutine t11 |
| !dir$ ignore_tkr x |
| !ERROR: !DIR$ IGNORE_TKR directive may apply only to a dummy data argument |
| real :: x |
| end |
| |
| subroutine t12(p,q,r) |
| !dir$ ignore_tkr p, q |
| !ERROR: 'p' is a data object and may not be EXTERNAL |
| real, external :: p |
| !ERROR: 'q' is already declared as an object |
| procedure(real) :: q |
| procedure(), pointer :: r |
| !ERROR: 'r' must be an object |
| !dir$ ignore_tkr r |
| end |
| |
| elemental subroutine t13(x) |
| !dir$ ignore_tkr(r) x |
| !ERROR: !DIR$ IGNORE_TKR(R) may not apply in an ELEMENTAL procedure |
| real, intent(in) :: x |
| end |
| |
| subroutine t14(x) |
| !dir$ ignore_tkr(r) x |
| !WARNING: !DIR$ IGNORE_TKR(R) should not apply to a dummy argument passed via descriptor |
| real x(:) |
| end |
| |
| end interface |
| |
| contains |
| subroutine t15(x) |
| !dir$ ignore_tkr x |
| !ERROR: !DIR$ IGNORE_TKR may not apply to an allocatable or pointer |
| real, intent(in), allocatable :: x |
| end |
| |
| subroutine t16(x) |
| !dir$ ignore_tkr x |
| !ERROR: !DIR$ IGNORE_TKR may not apply to an allocatable or pointer |
| real, intent(in), pointer :: x |
| end |
| |
| subroutine t17(x) |
| real x |
| x = x + 1. |
| !ERROR: !DIR$ IGNORE_TKR directive must appear in the specification part |
| !dir$ ignore_tkr x |
| end |
| |
| subroutine t18(x) |
| !ERROR: 'q' is not a valid letter for !DIR$ IGNORE_TKR directive |
| !dir$ ignore_tkr(q) x |
| real x |
| x = x + 1. |
| end |
| |
| subroutine t19(x) |
| real x |
| contains |
| subroutine inner |
| !ERROR: 'x' must be local to this subprogram |
| !dir$ ignore_tkr x |
| end |
| end |
| |
| subroutine t20(x) |
| real x |
| block |
| !ERROR: 'x' must be local to this subprogram |
| !dir$ ignore_tkr x |
| end block |
| end |
| |
| subroutine t22(x) |
| !dir$ ignore_tkr(r) x |
| !WARNING: !DIR$ IGNORE_TKR(R) is not meaningful for an assumed-rank array |
| real x(..) |
| end |
| |
| subroutine t23(x) |
| !dir$ ignore_tkr(r) x |
| !ERROR: !DIR$ IGNORE_TKR(R) may not apply to a dummy argument passed via descriptor |
| real x(:) |
| end |
| |
| end |
| |
| subroutine bad1(x) |
| !dir$ ignore_tkr x |
| !ERROR: !DIR$ IGNORE_TKR may apply only in an interface or a module procedure |
| real, intent(in) :: x |
| end |
| |
| program test |
| |
| !ERROR: !DIR$ IGNORE_TKR directive must appear in a subroutine or function |
| !dir$ ignore_tkr |
| |
| use m |
| real x |
| real a(2) |
| real m(2,2) |
| double precision dx |
| |
| call t1(1) |
| call t1(dx) |
| call t1('a') |
| call t1((1.,2.)) |
| call t1(.true.) |
| |
| call t2(1) |
| !ERROR: Actual argument type 'REAL(8)' is not compatible with dummy argument type 'REAL(4)' |
| call t2(dx) |
| call t2('a') |
| call t2((1.,2.)) |
| call t2(.true.) |
| |
| !ERROR: Actual argument type 'INTEGER(4)' is not compatible with dummy argument type 'REAL(4)' |
| call t3(1) |
| call t3(dx) |
| !ERROR: passing Hollerith or character literal as if it were BOZ |
| call t3('a') |
| !ERROR: Actual argument type 'COMPLEX(4)' is not compatible with dummy argument type 'REAL(4)' |
| call t3((1.,2.)) |
| !ERROR: Actual argument type 'LOGICAL(4)' is not compatible with dummy argument type 'REAL(4)' |
| call t3(.true.) |
| |
| call t4(x) |
| call t4(m) |
| call t5(x) |
| !WARNING: Actual argument array has fewer elements (2) than dummy argument 'm=' array (4) |
| call t5(a) |
| |
| call t6(1) |
| call t6(dx) |
| call t6('a') |
| call t6((1.,2.)) |
| call t6(.true.) |
| call t6(a) |
| |
| call t8(1) |
| call t8(dx) |
| call t8('a') |
| call t8((1.,2.)) |
| call t8(.true.) |
| call t8(a) |
| |
| contains |
| subroutine inner(x) |
| !dir$ ignore_tkr x |
| !ERROR: !DIR$ IGNORE_TKR may apply only in an interface or a module procedure |
| real, intent(in) :: x |
| end |
| end |