diff --git a/flang/lib/Semantics/type.cpp b/flang/lib/Semantics/type.cpp --- a/flang/lib/Semantics/type.cpp +++ b/flang/lib/Semantics/type.cpp @@ -77,7 +77,9 @@ name = *nextNameIter++; auto it{std::find_if(parameterDecls.begin(), parameterDecls.end(), [&](const Symbol &symbol) { return symbol.name() == name; })}; - CHECK(it != parameterDecls.end()); + if (it == parameterDecls.end()) { + break; + } attr = it->get().get().attr(); } else { messages.Say(name_, diff --git a/flang/test/Semantics/resolve33.f90 b/flang/test/Semantics/resolve33.f90 --- a/flang/test/Semantics/resolve33.f90 +++ b/flang/test/Semantics/resolve33.f90 @@ -30,4 +30,11 @@ !ERROR: Type parameter, component, or procedure binding 'a' already defined in this type integer, len :: a end type + !ERROR: No definition found for type parameter 'k' + !ERROR: No definition found for type parameter 'l' + type :: t6(k, l) + !ERROR: Must be a constant value + character(kind=k, len=l) :: d3 + end type + type(t6(2, 10)) :: x3 end module