Index: flang/lib/Semantics/resolve-names.cpp =================================================================== --- flang/lib/Semantics/resolve-names.cpp +++ flang/lib/Semantics/resolve-names.cpp @@ -5044,6 +5044,9 @@ const auto &name{std::get(x.t)}; GetCurrentAssociation().name = &name; if (auto *symbol{MakeAssocEntity()}) { + if (ExtractCoarrayRef(GetCurrentAssociation().selector.expr)) { // C1103 + Say("Selector must not be a coindexed object"_err_en_US); + } SetTypeFromAssociation(*symbol); SetAttrsFromAssociation(*symbol); } @@ -5098,6 +5101,9 @@ MakePlaceholder(*name, MiscDetails::Kind::SelectTypeAssociateName); association.name = &*name; auto exprType{association.selector.expr->GetType()}; + if (ExtractCoarrayRef(association.selector.expr)) { // C1103 + Say("Selector must not be a coindexed object"_err_en_US); + } if (exprType && !exprType->IsPolymorphic()) { // C1159 Say(association.selector.source, "Selector '%s' in SELECT TYPE statement must be " Index: flang/lib/Semantics/tools.cpp =================================================================== --- flang/lib/Semantics/tools.cpp +++ flang/lib/Semantics/tools.cpp @@ -739,7 +739,6 @@ } // C1101 and C1158 -// TODO Need to check for a coindexed object (why? C1103?) std::optional WhyNotModifiable( const Symbol &symbol, const Scope &scope) { const Symbol *root{GetAssociationRoot(symbol)}; Index: flang/test/Semantics/resolve95.f90 =================================================================== --- /dev/null +++ flang/test/Semantics/resolve95.f90 @@ -0,0 +1,15 @@ +! RUN: %S/test_errors.sh %s %t %f18 +! Test SELECT TYPE and ASSOCIATE errors: C1103 + +subroutine s1() + class(*),allocatable :: calc[:] + integer,save :: icoa[*] + !ERROR: Selector must not be a coindexed object + associate(sel=>icoa[2]) + end associate + icoa = 2 + allocate(integer::calc[*]) + !ERROR: Selector must not be a coindexed object + select type(sel=>calc[2]) + end select +end subroutine