! RUN: %flang_fc1 -emit-hlfir -o - %s | FileCheck %s ! CHECK-LABEL: func.func @_QPs1() SUBROUTINE s1 INTEGER i REAL r ! CHECK: %[[group:.*]] = fir.alloca !fir.array<4xi8> {uniq_name = "_QFs1Ei"} EQUIVALENCE (r,i) ! CHECK: %[[coor:.*]] = fir.coordinate_of %[[group]], %c0{{.*}} : (!fir.ref>, index) -> !fir.ref ! CHECK: %[[iloc:.*]] = fir.convert %[[coor]] : (!fir.ref) -> !fir.ptr ! CHECK: %[[i_decl:.*]]:2 = hlfir.declare %[[iloc]] storage(%[[group]][0]) {uniq_name = "_QFs1Ei"} ! CHECK: %[[coor2:.*]] = fir.coordinate_of %[[group]], %c0{{.*}} : (!fir.ref>, index) -> !fir.ref ! CHECK: %[[rloc:.*]] = fir.convert %[[coor2]] : (!fir.ref) -> !fir.ptr ! CHECK: %[[r_decl:.*]]:2 = hlfir.declare %[[rloc]] storage(%[[group]][0]) {uniq_name = "_QFs1Er"} i = 4 ! CHECK: hlfir.assign %c4{{.*}} to %[[i_decl]]#0 PRINT *, r ! CHECK: fir.load %[[r_decl]]#0 END SUBROUTINE s1 ! CHECK-LABEL: func.func @_QPs2() SUBROUTINE s2 INTEGER i(10) REAL r(10) ! CHECK: %[[arr:.*]] = fir.alloca !fir.array<48xi8> EQUIVALENCE (r(3),i(5)) ! CHECK: %[[coor:.*]] = fir.coordinate_of %[[arr]], %c0{{.*}} : (!fir.ref>, index) -> !fir.ref ! CHECK: %[[iarr:.*]] = fir.convert %[[coor]] : (!fir.ref) -> !fir.ptr> ! CHECK: %[[i_decl:.*]]:2 = hlfir.declare %[[iarr]](%{{.*}}) storage(%[[arr]][0]) {uniq_name = "_QFs2Ei"} ! CHECK: %[[coor2:.*]] = fir.coordinate_of %[[arr]], %c8{{.*}} : (!fir.ref>, index) -> !fir.ref ! CHECK: %[[rarr:.*]] = fir.convert %[[coor2]] : (!fir.ref) -> !fir.ptr> ! CHECK: %[[r_decl:.*]]:2 = hlfir.declare %[[rarr]](%{{.*}}) storage(%[[arr]][8]) {uniq_name = "_QFs2Er"} i(5) = 18 ! CHECK: %[[ides:.*]] = hlfir.designate %[[i_decl]]#0 (%c5{{.*}}) ! CHECK: hlfir.assign %c18{{.*}} to %[[ides]] PRINT *, r(3) ! CHECK: %[[rdes:.*]] = hlfir.designate %[[r_decl]]#0 (%c3{{.*}}) ! CHECK: fir.load %[[rdes]] END SUBROUTINE s2 ! CHECK-LABEL: func.func @_QPs3() SUBROUTINE s3 REAL r(10) TYPE t SEQUENCE REAL r(10) END TYPE t TYPE(t) x ! CHECK: %[[group:.*]] = fir.alloca !fir.array<40xi8> EQUIVALENCE (r,x) ! CHECK: %[[r_decl:.*]]:2 = hlfir.declare %{{.*}} storage(%[[group]][0]) {uniq_name = "_QFs3Er"} ! CHECK: %[[x_decl:.*]]:2 = hlfir.declare %{{.*}} storage(%[[group]][0]) {uniq_name = "_QFs3Ex"} x%r(9) = 9.0 ! CHECK: %[[xdes:.*]] = hlfir.designate %[[x_decl]]#0{"r"} <%{{.*}}> (%c9{{.*}}) ! CHECK: hlfir.assign %{{.*}} to %[[xdes]] PRINT *, r(9) ! CHECK: %[[rdes:.*]] = hlfir.designate %[[r_decl]]#0 (%c9{{.*}}) ! CHECK: fir.load %[[rdes]] END SUBROUTINE s3 ! test that equivalence in main program containing arrays are placed in global memory. ! CHECK: fir.global internal @_QFEa {alignment = 64 : i64} : !fir.array<400000000xi8> integer :: a, b(100000000) equivalence (a, b) b(1) = 42 print *, a CALL s1 CALL s2 CALL s3 END