diff --git a/flang/lib/Semantics/check-declarations.cpp b/flang/lib/Semantics/check-declarations.cpp --- a/flang/lib/Semantics/check-declarations.cpp +++ b/flang/lib/Semantics/check-declarations.cpp @@ -1356,6 +1356,7 @@ : "Procedure binding '%s' with no dummy arguments" " must have NOPASS attribute"_err_en_US, name); + context_.SetError(*interface); return; } passName = dummyArgs[0]->name(); @@ -1480,7 +1481,7 @@ SayWithDeclaration(*overridden, "A type-bound procedure and its override must have compatible interfaces"_err_en_US); } - } else { + } else if (!context_.HasError(binding.symbol())) { int passIndex{bindingChars->FindPassIndex(binding.passName())}; int overriddenPassIndex{ overriddenChars->FindPassIndex(overriddenBinding->passName())}; diff --git a/flang/test/Semantics/bindings01.f90 b/flang/test/Semantics/bindings01.f90 --- a/flang/test/Semantics/bindings01.f90 +++ b/flang/test/Semantics/bindings01.f90 @@ -132,6 +132,23 @@ end subroutine end module m1 +module t2 + type parent + real realField + contains + !ERROR: Procedure binding 'proc' with no dummy arguments must have NOPASS attribute + procedure proc + end type parent + type,extends(parent) :: child + contains + !ERROR: Procedure binding 'proc' with no dummy arguments must have NOPASS attribute + procedure proc + end type child +contains + subroutine proc + end subroutine +end module t2 + program test use m1 type,extends(t) :: t2