1! RUN: bbc %s -o - | tco | FileCheck %s
2! RUN: %flang -emit-llvm -S -mmlir -disable-external-name-interop %s -o - | FileCheck %s
3
4! CHECK: @_QB = common global [8 x i8] zeroinitializer
5! CHECK: @_QBrien = common global [1 x i8] zeroinitializer
6! CHECK: @_QBwith_empty_equiv = common global [8 x i8] zeroinitializer
7! CHECK: @_QBx = global { float, float } { float 1.0{{.*}}, float 2.0{{.*}} }
8! CHECK: @_QBy = common global [12 x i8] zeroinitializer
9! CHECK: @_QBz = global { i32, [4 x i8], float } { i32 42, [4 x i8] undef, float 3.000000e+00 }
10
11! CHECK-LABEL: _QPs0
12subroutine s0
13  common // a0, b0
14
15  ! CHECK: call void @_QPs(ptr @_QB, ptr getelementptr (i8, ptr @_QB, i64 4))
16  call s(a0, b0)
17end subroutine s0
18
19! CHECK-LABEL: _QPs1
20subroutine s1
21  common /x/ a1, b1
22  data a1 /1.0/, b1 /2.0/
23
24  ! CHECK: call void @_QPs(ptr @_QBx, ptr getelementptr (i8, ptr @_QBx, i64 4))
25  call s(a1, b1)
26end subroutine s1
27
28! CHECK-LABEL: _QPs2
29subroutine s2
30  common /y/ a2, b2, c2
31
32  ! CHECK: call void @_QPs(ptr @_QBy, ptr getelementptr (i8, ptr @_QBy, i64 4))
33  call s(a2, b2)
34end subroutine s2
35
36! Test that common initialized through aliases of common members are getting
37! the correct initializer.
38! CHECK-LABEL: _QPs3
39subroutine s3
40 integer :: i = 42
41 real :: x
42 complex :: c
43 real :: glue(2)
44 real :: y = 3.
45 equivalence (i, x), (glue(1), c), (glue(2), y)
46 ! x and c are not directly initialized, but overlapping aliases are.
47 common /z/ x, c
48end subroutine s3
49
50module mod_with_common
51  integer :: i, j
52  common /c_in_mod/ i, j
53end module
54! CHECK-LABEL: _QPs4
55subroutine s4
56  use mod_with_common
57  ! CHECK: load i32, ptr @_QBc_in_mod
58  print *, i
59  ! CHECK: load i32, ptr getelementptr (i8, ptr @_QBc_in_mod, i64 4)
60  print *, j
61end subroutine s4
62
63! CHECK-LABEL: _QPs5
64subroutine s5
65  real r(1:0)
66  common /rien/ r
67end subroutine s5
68
69! CHECK-LABEL: _QPs6
70subroutine s6
71  real r1(1:0), r2(1:0), x, y
72  common /with_empty_equiv/ x, r1, y
73  equivalence(r1, r2)
74end subroutine s6
75