| ! RUN: %python %S/test_symbols.py %s %flang_fc1 |
| ! Test handling of pernicious case in which it is conformant Fortran |
| ! to use the name of a function in a CALL statement. Almost all |
| ! other compilers produce bogus errors for this case and/or crash. |
| |
| !DEF: /m Module |
| module m |
| contains |
| !DEF: /m/foo PUBLIC (Function) Subprogram |
| function foo() |
| !DEF: /m/bar PUBLIC (Subroutine) Subprogram |
| !DEF: /m/foo/foo EXTERNAL, POINTER (Subroutine) ProcEntity |
| procedure(bar), pointer :: foo |
| !REF: /m/bar |
| !DEF: /m/foo/baz EXTERNAL, POINTER (Subroutine) ProcEntity |
| procedure(bar), pointer :: baz |
| !REF: /m/foo/foo |
| !REF: /m/bar |
| foo => bar |
| !REF: /m/foo/foo |
| call foo |
| !DEF: /m/baz PUBLIC (Function) Subprogram |
| entry baz() |
| !REF: /m/foo/baz |
| !REF: /m/bar |
| baz => bar |
| !REF: /m/foo/baz |
| call baz |
| end function |
| !REF: /m/bar |
| subroutine bar |
| print *, "in bar" |
| end subroutine |
| end module |
| !DEF: /demo MainProgram |
| program demo |
| !REF: /m |
| use :: m |
| !DEF: /demo/bar (Subroutine) Use |
| !DEF: /demo/p EXTERNAL, POINTER (Subroutine) ProcEntity |
| procedure(bar), pointer :: p |
| !REF: /demo/p |
| !DEF: /demo/foo (Function) Use |
| p => foo() |
| !REF: /demo/p |
| call p |
| end program |