diff --git a/flang/lib/Optimizer/Builder/IntrinsicCall.cpp b/flang/lib/Optimizer/Builder/IntrinsicCall.cpp --- a/flang/lib/Optimizer/Builder/IntrinsicCall.cpp +++ b/flang/lib/Optimizer/Builder/IntrinsicCall.cpp @@ -4899,9 +4899,6 @@ fir::isPointerType(boxTy) ? "unlimited polymorphic disassociated POINTER in STORAGE_SIZE" : "unlimited polymorphic unallocated ALLOCATABLE in STORAGE_SIZE"; - } else if (fir::isPolymorphicType(boxTy) && fir::isPointerType(boxTy)) { - needRuntimeCheck = true; - errorMsg = "polymorphic disassociated POINTER in STORAGE_SIZE"; } const fir::MutableBoxValue *mutBox = args[0].getBoxOf(); if (needRuntimeCheck && mutBox) { diff --git a/flang/test/Lower/Intrinsics/storage_size.f90 b/flang/test/Lower/Intrinsics/storage_size.f90 --- a/flang/test/Lower/Intrinsics/storage_size.f90 +++ b/flang/test/Lower/Intrinsics/storage_size.f90 @@ -72,14 +72,6 @@ ! CHECK-SAME: %[[P:.*]]: !fir.ref>>> {fir.bindc_name = "p"}) -> i32 { ! CHECK: %[[SIZE:.*]] = fir.alloca i32 {bindc_name = "size", uniq_name = "_QMstorage_size_testFpolymorphic_pointerEsize"} ! CHECK: %[[LOAD_P:.*]] = fir.load %[[P]] : !fir.ref>>> -! CHECK: %[[P_ADDR:.*]] = fir.box_addr %[[LOAD_P]] : (!fir.class>>) -> !fir.ptr> -! CHECK: %[[P_ADDR_I64:.*]] = fir.convert %[[P_ADDR]] : (!fir.ptr>) -> i64 -! CHECK: %[[C0:.*]] = arith.constant 0 : i64 -! CHECK: %[[IS_NULL_ADDR:.*]] = arith.cmpi eq, %[[P_ADDR_I64]], %[[C0]] : i64 -! CHECK: fir.if %[[IS_NULL_ADDR]] { -! CHECK: %{{.*}} = fir.call @_FortranAReportFatalUserError(%{{.*}}, %{{.*}}, %{{.*}}) {{.*}} : (!fir.ref, !fir.ref, i32) -> none -! CHECK: } -! CHECK: %[[LOAD_P:.*]] = fir.load %[[P]] : !fir.ref>>> ! CHECK: %[[ELE_SIZE:.*]] = fir.box_elesize %[[LOAD_P]] : (!fir.class>>) -> i32 ! CHECK: %[[C8:.*]] = arith.constant 8 : i32 ! CHECK: %[[BITS:.*]] = arith.muli %[[ELE_SIZE]], %[[C8]] : i32