return true;
}
// Inquiries on local objects may not access a deferred bound or length.
+ // (This code used to be a switch, but it proved impossible to write it
+ // thus without running afoul of bogus warnings from different C++
+ // compilers.)
+ if (field == DescriptorInquiry::Field::Rank) {
+ return true; // always known
+ }
const auto *object{lastSymbol.detailsIf<semantics::ObjectEntityDetails>()};
- switch (field) {
- case DescriptorInquiry::Field::LowerBound:
- case DescriptorInquiry::Field::Extent:
- case DescriptorInquiry::Field::Stride:
+ if (field == DescriptorInquiry::Field::LowerBound ||
+ field == DescriptorInquiry::Field::Extent ||
+ field == DescriptorInquiry::Field::Stride) {
return object && !object->shape().CanBeDeferredShape();
- case DescriptorInquiry::Field::Rank:
- return true; // always known
- case DescriptorInquiry::Field::Len:
+ }
+ if (field == DescriptorInquiry::Field::Len) {
return object && object->type() &&
object->type()->category() == semantics::DeclTypeSpec::Character &&
!object->type()->characterTypeSpec().length().isDeferred();
}
- // TODO: Handle non-deferred LEN type parameters of PDTs
return false;
}