@@ -306,6 +306,10 @@ static bool isArrayLike(mlir::Type type) {
306306}
307307
308308static bool isCompositeLike (mlir::Type type) {
309+ // class(*) is not a composite type since it does not have a determined type.
310+ if (fir::isUnlimitedPolymorphicType (type))
311+ return false ;
312+
309313 return mlir::isa<fir::RecordType, fir::ClassType, mlir::TupleType>(type);
310314}
311315
@@ -322,8 +326,13 @@ OpenACCMappableModel<fir::BaseBoxType>::getTypeCategory(mlir::Type type,
322326 mlir::Value var) const {
323327 // Class-type does not behave like a normal box because it does not hold an
324328 // element type. Thus special handle it here.
325- if (mlir::isa<fir::ClassType>(type))
329+ if (mlir::isa<fir::ClassType>(type)) {
330+ // class(*) is not a composite type since it does not have a determined
331+ // type.
332+ if (fir::isUnlimitedPolymorphicType (type))
333+ return mlir::acc::VariableTypeCategory::uncategorized;
326334 return mlir::acc::VariableTypeCategory::composite;
335+ }
327336
328337 mlir::Type eleTy = fir::dyn_cast_ptrOrBoxEleTy (type);
329338 assert (eleTy && " expect to be able to unwrap the element type" );
@@ -409,8 +418,12 @@ categorizePointee(mlir::Type pointer,
409418 return mlir::acc::VariableTypeCategory::composite;
410419 if (mlir::isa<fir::CharacterType, mlir::FunctionType>(eleTy))
411420 return mlir::acc::VariableTypeCategory::nonscalar;
421+ // Assumed-type (type(*))does not have a determined type that can be
422+ // categorized.
423+ if (mlir::isa<mlir::NoneType>(eleTy))
424+ return mlir::acc::VariableTypeCategory::uncategorized;
412425 // "pointers" - in the sense of raw address point-of-view, are considered
413- // scalars. However
426+ // scalars.
414427 if (mlir::isa<fir::LLVMPointerType>(eleTy))
415428 return mlir::acc::VariableTypeCategory::scalar;
416429
0 commit comments