diff options
Diffstat (limited to 'flang/lib/Optimizer/Builder/HLFIRTools.cpp')
| -rw-r--r-- | flang/lib/Optimizer/Builder/HLFIRTools.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/flang/lib/Optimizer/Builder/HLFIRTools.cpp b/flang/lib/Optimizer/Builder/HLFIRTools.cpp index 31e2c4082b32..8d0ae2f19517 100644 --- a/flang/lib/Optimizer/Builder/HLFIRTools.cpp +++ b/flang/lib/Optimizer/Builder/HLFIRTools.cpp @@ -882,10 +882,15 @@ static fir::ExtendedValue translateVariableToExtendedValue( mlir::Location loc, fir::FirOpBuilder &builder, hlfir::Entity variable, bool forceHlfirBase = false, bool contiguousHint = false) { assert(variable.isVariable() && "must be a variable"); - /// When going towards FIR, use the original base value to avoid - /// introducing descriptors at runtime when they are not required. - mlir::Value base = - forceHlfirBase ? variable.getBase() : variable.getFirBase(); + // When going towards FIR, use the original base value to avoid + // introducing descriptors at runtime when they are not required. + // This is not done for assumed-rank since the fir::ExtendedValue cannot + // held the related lower bounds in an vector. The lower bounds of the + // descriptor must always be used instead. + + mlir::Value base = (forceHlfirBase || variable.isAssumedRank()) + ? variable.getBase() + : variable.getFirBase(); if (variable.isMutableBox()) return fir::MutableBoxValue(base, getExplicitTypeParams(variable), fir::MutableProperties{}); |
