| ! { dg-do run } |
| ! |
| ! This tests that common blocks function with multiply nested modules. |
| ! Contributed by Paul Thomas <pault@gcc.gnu.org> |
| ! |
| module mod0 |
| complex(kind=8) FOO, KANGA |
| common /bar/ FOO, KANGA |
| contains |
| subroutine eyeore () |
| FOO = FOO + (1.0d0, 0.0d0) |
| KANGA = KANGA - (1.0d0, 0.0d0) |
| end subroutine eyeore |
| end module mod0 |
| module mod1 |
| use mod0 |
| complex ROBIN |
| common/owl/ROBIN |
| end module mod1 |
| module mod2 |
| use mod0 |
| use mod1 |
| real(kind=8) re1, im1, re2, im2, re, im |
| common /bar/ re1, im1, re2, im2 |
| equivalence (re1, re), (im1, im) |
| contains |
| subroutine tigger (w) |
| complex(kind=8) w |
| if (FOO.ne.(1.0d0, 1.0d0)) STOP 1 |
| if (KANGA.ne.(-1.0d0, -1.0d0)) STOP 2 |
| if (ROBIN.ne.(99.0d0, 99.0d0)) STOP 3 |
| if (w.ne.cmplx(re,im)) STOP 4 |
| end subroutine tigger |
| end module mod2 |
| |
| use mod2 |
| use mod0, only: w=>foo |
| w = (0.0d0, 1.0d0) ! Was foo but this is forbidden (11.3.2) |
| KANGA = (0.0d0, -1.0d0) |
| ROBIN = (99.0d0, 99.0d0) |
| call eyeore () |
| call tigger (w) |
| end |