diff --git a/flang/lib/Semantics/runtime-type-info.cpp b/flang/lib/Semantics/runtime-type-info.cpp index c46b12d6b30e8..aa470ecdc7719 100644 --- a/flang/lib/Semantics/runtime-type-info.cpp +++ b/flang/lib/Semantics/runtime-type-info.cpp @@ -310,8 +310,11 @@ static SomeExpr StructureExpr(evaluate::StructureConstructor &&x) { static int GetIntegerKind(const Symbol &symbol) { auto dyType{evaluate::DynamicType::From(symbol)}; - CHECK(dyType && dyType->category() == TypeCategory::Integer); - return dyType->kind(); + CHECK((dyType && dyType->category() == TypeCategory::Integer) || + symbol.owner().context().HasError(symbol)); + return dyType && dyType->category() == TypeCategory::Integer + ? dyType->kind() + : symbol.owner().context().GetDefaultKind(TypeCategory::Integer); } // Save a rank-1 array constant of some numeric type as an diff --git a/flang/test/Driver/dump-all-bad.f90 b/flang/test/Driver/dump-all-bad.f90 index 2d6f71a526af5..58f0d02c49746 100644 --- a/flang/test/Driver/dump-all-bad.f90 +++ b/flang/test/Driver/dump-all-bad.f90 @@ -10,6 +10,8 @@ ! CHECK: Flang: symbols dump program bad - real,pointer :: x - x = null() ! Error - must be pointer assignment + type dt(k) + integer(kind=16) :: k + integer(kind=16) :: comp + end type dt end