diff options
author | Daniel Chen <cdchen@ca.ibm.com> | 2024-05-02 10:04:24 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-02 10:04:24 -0400 |
commit | d6173167df31388869d22751fdd745f5da928ef7 (patch) | |
tree | d34ddc252239b574875a14d95995cfc1a02c8a08 | |
parent | 3fe282a83d2bcc23f1a3f9bc47682f7c4bfc9b88 (diff) | |
download | llvm-d6173167df31388869d22751fdd745f5da928ef7.zip llvm-d6173167df31388869d22751fdd745f5da928ef7.tar.gz llvm-d6173167df31388869d22751fdd745f5da928ef7.tar.bz2 |
[Flang] Get fir::SequenceType from hlfir::ExprType before getShape. (#90055)
This PR is to fix issue #88889 .
Because the type of an actual argument of an array expression of
character has type of `hlfir::ExprType`, we need to transform it to
`fir::SequenceType` before calling `getBoxTypeWithNewShape`.
Calling `hlfir::ExprType::getShape` inside of `getBoxTypeWithNewShape`
will introduce a circular dependency on FIRDialect and HLFIRDialect
libraries.
-rw-r--r-- | flang/lib/Lower/ConvertCall.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/flang/lib/Lower/ConvertCall.cpp b/flang/lib/Lower/ConvertCall.cpp index e4a0cc8..3659dad 100644 --- a/flang/lib/Lower/ConvertCall.cpp +++ b/flang/lib/Lower/ConvertCall.cpp @@ -1184,12 +1184,15 @@ static PreparedDummyArgument preparePresentUserCallActualArgument( // actual argument shape information. A descriptor with the dummy shape // information will be created later when all actual arguments are ready. mlir::Type dummyTypeWithActualRank = dummyType; - if (auto baseBoxDummy = mlir::dyn_cast<fir::BaseBoxType>(dummyType)) + if (auto baseBoxDummy = mlir::dyn_cast<fir::BaseBoxType>(dummyType)) { if (baseBoxDummy.isAssumedRank() || arg.testTKR(Fortran::common::IgnoreTKR::Rank) || - arg.isSequenceAssociatedDescriptor()) - dummyTypeWithActualRank = - baseBoxDummy.getBoxTypeWithNewShape(actual.getType()); + arg.isSequenceAssociatedDescriptor()) { + mlir::Type actualTy = + hlfir::getFortranElementOrSequenceType(actual.getType()); + dummyTypeWithActualRank = baseBoxDummy.getBoxTypeWithNewShape(actualTy); + } + } // Preserve the actual type in the argument preparation in case IgnoreTKR(t) // is set (descriptors must be created with the actual type in this case, and // copy-in/copy-out should be driven by the contiguity with regard to the |