blob: ba2536ce91001306078d076620a633fbdc86775b [file]
! Regression test for https://github.com/llvm/llvm-project/issues/178821
! Verify that the stack-arrays pass does not move a stack allocation
! for a temporary outside its stacksave/stackrestore scope when the
! size operand is shared across scopes (e.g. due to ConvertHLFIRtoFIR
! reusing a single size value, or CSE merging duplicates).
! RUN: %flang_fc1 -emit-fir -fstack-arrays %s -o - \
! RUN: | fir-opt --stack-arrays \
! RUN: | FileCheck %s
subroutine ss1(a)
character*(*) a(1)
character*1 t_s
call u(t_s() // '?' // a)
call u(t_s() // '?' // a)
end subroutine
! CHECK-LABEL: func.func @_QPss1
!
! First scope:
! CHECK: llvm.intr.stacksave
! CHECK: fir.alloca !fir.array<1x!fir.char<1,?>>
! CHECK-SAME: {bindc_name = ".tmp.array"}
! CHECK: fir.call @_QPu(
! CHECK: llvm.intr.stackrestore
!
! Second scope (the second alloca must be AFTER the first stackrestore):
! CHECK: llvm.intr.stacksave
! CHECK: fir.alloca !fir.array<1x!fir.char<1,?>>
! CHECK-SAME: {bindc_name = ".tmp.array"}
! CHECK: fir.call @_QPu(
! CHECK: llvm.intr.stackrestore