Files
clang-p2996/flang/test/Lower/HLFIR/bindc-module-var.f90
jeanPerier a96b4671b9 [flang] Lower BIND(C) module variables (#78279)
Lower initialized BIND(C) module variable as regular module variable,
except that the fir.global symbol name is the binding label.

For uninitialized variables, add the common linkage so that C code may
define the variables. The standard does not provide a way to indicate
that a variable is defined in C, but there are use cases.

Beware that if the module file compiled object is added to a shared
library, the variable will become a regular global definition and may
override the C variable depending on the linking order.
2024-01-17 17:44:39 +01:00

30 lines
987 B
Fortran

! Test BIND(C) module variable lowering
! RUN: bbc -emit-hlfir -o - %s | FileCheck %s
module some_c_module
integer, bind(c, name="i_var") :: i = 1
integer, bind(c, name="i_var_no_init") :: i_no_init
integer, bind(c) :: j_var = 2
integer, bind(c) :: j_var_no_init
end module
! CHECK-LABEL: fir.global @i_var : i32 {
! CHECK: %[[VAL_0:.*]] = arith.constant 1 : i32
! CHECK: fir.has_value %[[VAL_0]] : i32
! CHECK: }
! CHECK-LABEL: fir.global common @i_var_no_init : i32 {
! CHECK: %[[VAL_0:.*]] = fir.zero_bits i32
! CHECK: fir.has_value %[[VAL_0]] : i32
! CHECK: }
! CHECK-LABEL: fir.global @j_var : i32 {
! CHECK: %[[VAL_0:.*]] = arith.constant 2 : i32
! CHECK: fir.has_value %[[VAL_0]] : i32
! CHECK: }
! CHECK-LABEL: fir.global common @j_var_no_init : i32 {
! CHECK: %[[VAL_0:.*]] = fir.zero_bits i32
! CHECK: fir.has_value %[[VAL_0]] : i32
! CHECK: }