blob: 274d68b1adf62b4e0851313e8d3e671221ef9352 [file] [edit]
! RUN: bbc -emit-hlfir %s -o - | FileCheck %s
! RUN: %flang_fc1 -emit-llvm %s -o - | FileCheck %s --check-prefix=LLVM
program character_array_constant
character(4) :: values(10000)
character(4) :: words(3)
data values / 10000 * ' ' /
data words / 3 * 'ab' /
end program
! CHECK-LABEL: fir.global internal @_QFEvalues
! CHECK: %[[UNDEF:.*]] = fir.undefined !fir.array<10000x!fir.char<1,4>>
! CHECK-NEXT: %[[SPACE:.*]] = fir.string_lit " "(4) : !fir.char<1,4>
! CHECK-NEXT: %[[INIT:.*]] = fir.insert_on_range %[[UNDEF]], %[[SPACE]] from (0) to (9999) : (!fir.array<10000x!fir.char<1,4>>, !fir.char<1,4>) -> !fir.array<10000x!fir.char<1,4>>
! CHECK: fir.has_value %[[INIT]] : !fir.array<10000x!fir.char<1,4>>
! CHECK-LABEL: fir.global internal @_QFEwords
! CHECK: %[[UNDEF:.*]] = fir.undefined !fir.array<3x!fir.char<1,4>>
! CHECK-NEXT: %[[AB:.*]] = fir.string_lit "ab "(4) : !fir.char<1,4>
! CHECK-NEXT: %[[INIT:.*]] = fir.insert_on_range %[[UNDEF]], %[[AB]] from (0) to (2) : (!fir.array<3x!fir.char<1,4>>, !fir.char<1,4>) -> !fir.array<3x!fir.char<1,4>>
! CHECK: fir.has_value %[[INIT]] : !fir.array<3x!fir.char<1,4>>
! LLVM: @_QFEvalues = internal global [10000 x [4 x i8]]
! LLVM: @_QFEwords = internal global [3 x [4 x i8]] [{{.*}}c"ab ", {{.*}}c"ab ", {{.*}}c"ab "]
! A CHARACTER array component is an array of characters nested inside a
! structure, so its initial value cannot be described by an array attribute.
subroutine component()
type t
character(2) :: c(2)
end type
type(t), save :: x = t(c=["ab", "ab"])
call use_x(x)
end subroutine
! CHECK-LABEL: fir.global internal @_QFcomponentEx
! CHECK: %[[AB:.*]] = fir.string_lit "ab"(2) : !fir.char<1,2>
! CHECK-NEXT: fir.insert_on_range %{{.*}}, %[[AB]] from (0) to (1) : (!fir.array<2x!fir.char<1,2>>, !fir.char<1,2>) -> !fir.array<2x!fir.char<1,2>>
! LLVM: @_QFcomponentEx = internal global %_QFcomponentTt { [2 x [2 x i8]] [{{.*}}c"ab", {{.*}}c"ab"] }