! RUN: bbc %s -o - | tco | FileCheck %s ! RUN: %flang -emit-llvm -S -mmlir -disable-external-name-interop %s -o - | FileCheck %s ! CHECK: @__BLNK__ = common global [8 x i8] zeroinitializer ! CHECK: @rien_ = common global [1 x i8] zeroinitializer ! CHECK: @with_empty_equiv_ = common global [8 x i8] zeroinitializer ! CHECK: @x_ = global { float, float } { float 1.0{{.*}}, float 2.0{{.*}} } ! CHECK: @y_ = common global [12 x i8] zeroinitializer ! CHECK: @z_ = global { i32, [4 x i8], float } { i32 42, [4 x i8] zeroinitializer, float 3.000000e+00 } ! CHECK-LABEL: _QPs0 subroutine s0 common // a0, b0 ! CHECK: call void @_QPs(ptr @__BLNK__, ptr getelementptr (i8, ptr @__BLNK__, i64 4)) call s(a0, b0) end subroutine s0 ! CHECK-LABEL: _QPs1 subroutine s1 common /x/ a1, b1 data a1 /1.0/, b1 /2.0/ ! CHECK: call void @_QPs(ptr @x_, ptr getelementptr (i8, ptr @x_, i64 4)) call s(a1, b1) end subroutine s1 ! CHECK-LABEL: _QPs2 subroutine s2 common /y/ a2, b2, c2 ! CHECK: call void @_QPs(ptr @y_, ptr getelementptr (i8, ptr @y_, i64 4)) call s(a2, b2) end subroutine s2 ! Test that common initialized through aliases of common members are getting ! the correct initializer. ! CHECK-LABEL: _QPs3 subroutine s3 integer :: i = 42 real :: x complex :: c real :: glue(2) real :: y = 3. equivalence (i, x), (glue(1), c), (glue(2), y) ! x and c are not directly initialized, but overlapping aliases are. common /z/ x, c end subroutine s3 module mod_with_common integer :: i, j common /c_in_mod/ i, j end module ! CHECK-LABEL: _QPs4 subroutine s4 use mod_with_common ! CHECK: load i32, ptr @c_in_mod_ print *, i ! CHECK: load i32, ptr getelementptr (i8, ptr @c_in_mod_, i64 4) print *, j end subroutine s4 ! CHECK-LABEL: _QPs5 subroutine s5 real r(1:0) common /rien/ r end subroutine s5 ! CHECK-LABEL: _QPs6 subroutine s6 real r1(1:0), r2(1:0), x, y common /with_empty_equiv/ x, r1, y equivalence(r1, r2) end subroutine s6