Skip to content

Commit d71bc1b

Browse files
committed
Test entities
1 parent 2283349 commit d71bc1b

File tree

2 files changed

+49
-5
lines changed

2 files changed

+49
-5
lines changed

flang/lib/Lower/OpenMP/DataSharingProcessor.cpp

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -425,12 +425,23 @@ void DataSharingProcessor::doPrivatize(
425425
mlir::Block *copyEntryBlock = firOpBuilder.createBlock(
426426
&copyRegion, /*insertPt=*/{}, {symType, symType}, {symLoc, symLoc});
427427
firOpBuilder.setInsertionPointToEnd(copyEntryBlock);
428-
symTable->addSymbol(*sym,
429-
fir::substBase(symExV, copyRegion.getArgument(0)),
430-
/*force=*/true);
428+
429+
auto addSymbol = [&](unsigned argIdx, bool force = false) {
430+
symExV.match(
431+
[&](const fir::MutableBoxValue &box) {
432+
symTable->addSymbol(
433+
*sym, fir::substBase(box, copyRegion.getArgument(argIdx)),
434+
force);
435+
},
436+
[&](const auto &box) {
437+
symTable->addSymbol(*sym, copyRegion.getArgument(argIdx), force);
438+
});
439+
};
440+
441+
addSymbol(0, true);
431442
symTable->pushScope();
432-
symTable->addSymbol(*sym,
433-
fir::substBase(symExV, copyRegion.getArgument(1)));
443+
addSymbol(1);
444+
434445
auto ip = firOpBuilder.saveInsertionPoint();
435446
copyFirstPrivateSymbol(sym, &ip);
436447

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
! Test delayed privatization for the `CHARACTER` type.
2+
3+
! RUN: %flang_fc1 -emit-hlfir -fopenmp -mmlir --openmp-enable-delayed-privatization \
4+
! RUN: -o - %s 2>&1 | FileCheck %s
5+
! RUN: bbc -emit-hlfir -fopenmp --openmp-enable-delayed-privatization -o - %s 2>&1 \
6+
! RUN: | FileCheck %s
7+
8+
subroutine delayed_privatization_character(var1, l)
9+
implicit none
10+
integer(8):: l
11+
character(len = l) :: var1
12+
13+
!$omp parallel firstprivate(var1)
14+
var1 = "test"
15+
!$omp end parallel
16+
end subroutine
17+
18+
! CHECK-LABEL: omp.private {type = firstprivate}
19+
! CHECK-SAME: @[[PRIVATIZER_SYM:.*]] : [[TYPE:!fir.boxchar<1>]] alloc {
20+
21+
! CHECK-NEXT: ^bb0(%[[PRIV_ARG:.*]]: [[TYPE]]):
22+
! CHECK-NEXT: %[[UNBOX:.*]]:2 = fir.unboxchar %[[PRIV_ARG]]
23+
! CHECK: %[[PRIV_ALLOC:.*]] = fir.alloca !fir.char<1,?>(%[[UNBOX]]#1 : index)
24+
! CHECK-NEXT: %[[PRIV_DECL:.*]]:2 = hlfir.declare %[[PRIV_ALLOC]] typeparams %[[UNBOX]]#1
25+
! CHECK-NEXT: omp.yield(%[[PRIV_DECL]]#0 : !fir.boxchar<1>)
26+
27+
! CHECK-NEXT: } copy {
28+
! CHECK-NEXT: ^bb0(%[[PRIV_ORIG_ARG:.*]]: [[TYPE]], %[[PRIV_PRIV_ARG:.*]]: [[TYPE]]):
29+
30+
! CHECK-NEXT: hlfir.assign %[[PRIV_ORIG_ARG]] to %[[PRIV_PRIV_ARG]]
31+
32+
! CHECK-NEXT: omp.yield(%[[PRIV_PRIV_ARG]] : !fir.boxchar<1>)
33+
! CHECK-NEXT: }

0 commit comments

Comments
 (0)