|
| 1 | +!RUN: %flang_fc1 -emit-hlfir -fopenmp -o - %s 2>&1 | FileCheck %s |
| 2 | + |
| 3 | +!CHECK-LABEL: func @_QPtest_dynlen_char_ptr |
| 4 | +!CHECK: omp.parallel private(@{{.*}} %{{.*}}#0 -> %[[A:.*]] : !fir.ref<!fir.box<!fir.ptr<!fir.char<1,?>>>>) { |
| 5 | +!CHECK: %[[A_DECL:.*]]:2 = hlfir.declare %[[A]] {fortran_attrs = #fir.var_attrs<pointer>, uniq_name = "_QFtest_dynlen_char_ptrEa"} : (!fir.ref<!fir.box<!fir.ptr<!fir.char<1,?>>>>) -> (!fir.ref<!fir.box<!fir.ptr<!fir.char<1,?>>>>, !fir.ref<!fir.box<!fir.ptr<!fir.char<1,?>>>>) |
| 6 | +!CHECK: %[[A_VAL:.*]] = fir.load %[[A_DECL]]#0 : !fir.ref<!fir.box<!fir.ptr<!fir.char<1,?>>>> |
| 7 | +!CHECK: %[[LEN:.*]] = fir.box_elesize %[[A_VAL]] : (!fir.box<!fir.ptr<!fir.char<1,?>>>) -> index |
| 8 | +!CHECK: %[[A_BOX_NONE:.*]] = fir.convert %[[A_DECL]]#0 : (!fir.ref<!fir.box<!fir.ptr<!fir.char<1,?>>>>) -> !fir.ref<!fir.box<none>> |
| 9 | +!CHECK: %[[LEN_I64:.*]] = fir.convert %[[LEN]] : (index) -> i64 |
| 10 | +!CHECK: fir.call @_FortranAPointerNullifyCharacter(%[[A_BOX_NONE]], %[[LEN_I64]], {{.*}}) |
| 11 | +subroutine test_dynlen_char_ptr(i) |
| 12 | + character(i), pointer :: a |
| 13 | + |
| 14 | + !$omp parallel private(a) |
| 15 | + allocate(a) |
| 16 | + a = "abc" |
| 17 | + !$omp end parallel |
| 18 | +end subroutine |
| 19 | + |
| 20 | +!CHECK-LABEL: func @_QPtest_dynlen_char_ptr_array |
| 21 | +!CHECK: omp.parallel private(@{{.*}} %{{.*}}#0 -> %[[A:.*]] : !fir.ref<!fir.box<!fir.ptr<!fir.array<?x!fir.char<1,?>>>>>) { |
| 22 | +!CHECK: %[[A_DECL:.*]]:2 = hlfir.declare %[[A]] {fortran_attrs = #fir.var_attrs<pointer>, uniq_name = "_QFtest_dynlen_char_ptr_arrayEa"} : (!fir.ref<!fir.box<!fir.ptr<!fir.array<?x!fir.char<1,?>>>>>) -> (!fir.ref<!fir.box<!fir.ptr<!fir.array<?x!fir.char<1,?>>>>>, !fir.ref<!fir.box<!fir.ptr<!fir.array<?x!fir.char<1,?>>>>>) |
| 23 | +!CHECK: %[[A_VAL:.*]] = fir.load %[[A_DECL]]#0 |
| 24 | +!CHECK: %[[LEN:.*]] = fir.box_elesize %[[A_VAL]] |
| 25 | +!CHECK: %[[A_BOX_NONE:.*]] = fir.convert %[[A_DECL]]#0 : (!fir.ref<!fir.box<!fir.ptr<!fir.array<?x!fir.char<1,?>>>>>) -> !fir.ref<!fir.box<none>> |
| 26 | +!CHECK: %[[LEN_I64:.*]] = fir.convert %[[LEN]] : (index) -> i64 |
| 27 | +!CHECK: fir.call @_FortranAPointerNullifyCharacter(%[[A_BOX_NONE]], %[[LEN_I64]], {{.*}}) |
| 28 | +subroutine test_dynlen_char_ptr_array(i) |
| 29 | + character(i), pointer :: a(:) |
| 30 | + |
| 31 | + !$omp parallel private(a) |
| 32 | + allocate(a(i)) |
| 33 | + a = "abc" |
| 34 | + !$omp end parallel |
| 35 | +end subroutine |
0 commit comments