| ! RUN: %python %S/test_symbols.py %s %flang_fc1 |
| ! Test host association in internal subroutine of main program. |
| |
| !DEF: /main MainProgram |
| program main |
| !DEF: /main/x ObjectEntity INTEGER(4) |
| integer x |
| !DEF: /main/s (Subroutine) Subprogram |
| call s |
| contains |
| !REF: /main/s |
| subroutine s |
| !DEF: /main/s/y (Implicit) ObjectEntity REAL(4) |
| !DEF: /main/s/x HostAssoc INTEGER(4) |
| y = x |
| contains |
| !DEF: /main/s/s2 (Subroutine) Subprogram |
| subroutine s2 |
| !DEF: /main/s/s2/z (Implicit) ObjectEntity REAL(4) |
| !DEF: /main/s/s2/x HostAssoc INTEGER(4) |
| z = x |
| end subroutine |
| end subroutine |
| end program |
| |
| !DEF: /s (Subroutine) Subprogram |
| subroutine s |
| !DEF: /s/x ObjectEntity REAL(4) |
| real x(100, 100) |
| !DEF: /s/s1 (Subroutine) Subprogram |
| call s1 |
| contains |
| !REF: /s/s1 |
| subroutine s1 |
| !DEF: /s/s1/x HostAssoc REAL(4) |
| print *, x(10, 10) |
| end subroutine |
| end subroutine |
| |
| !DEF: /sb (Subroutine) Subprogram |
| subroutine sb |
| !DEF: /sb/x TARGET ObjectEntity REAL(4) |
| real, target :: x |
| !DEF: /sb/s1 (Subroutine) Subprogram |
| call s1 |
| contains |
| !REF: /sb/s1 |
| subroutine s1 |
| !DEF: /sb/s1/p POINTER ObjectEntity REAL(4) |
| real, pointer :: p |
| !REF: /sb/s1/p |
| !DEF: /sb/s1/x TARGET HostAssoc REAL(4) |
| p => x |
| end subroutine |
| end subroutine |
| |
| ! Test host associated symbols are also created for symbols that are use |
| ! associated in the host. |
| |
| !DEF: /m1 Module |
| module m1 |
| !DEF: /m1/x PUBLIC ObjectEntity REAL(4) |
| real x(100,100) |
| !DEF: /m1/x_target PUBLIC, TARGET ObjectEntity REAL(4) |
| real, target :: x_target |
| end module |
| |
| !DEF: /s_use (Subroutine) Subprogram |
| subroutine s_use |
| !REF: /m1 |
| use :: m1 |
| !DEF: /s_use/x Use REAL(4) |
| print *, x |
| !DEF: /s_use/s1 (Subroutine) Subprogram |
| call s1 |
| contains |
| !REF: /s_use/s1 |
| subroutine s1 |
| !DEF: /s_use/s1/x HostAssoc REAL(4) |
| print *, x(10,10) |
| end subroutine |
| end subroutine |
| |
| !DEF: /sb_use (Subroutine) Subprogram |
| subroutine sb_use |
| !REF: /m1 |
| use :: m1 |
| !DEF: /sb_use/x_target TARGET Use REAL(4) |
| print *, x_target |
| !DEF: /sb_use/s1 (Subroutine) Subprogram |
| call s1 |
| contains |
| !REF: /sb_use/s1 |
| subroutine s1 |
| !DEF: /sb_use/s1/p POINTER ObjectEntity REAL(4) |
| real, pointer :: p |
| !REF: /sb_use/s1/p |
| !DEF: /sb_use/s1/x_target TARGET HostAssoc REAL(4) |
| p => x_target |
| end subroutine |
| end subroutine |