1919#include " flang/Parser/parse-tree.h"
2020#include " flang/Parser/tools.h"
2121#include " flang/Semantics/expression.h"
22+ #include " flang/Semantics/symbol.h"
2223#include " flang/Semantics/tools.h"
2324#include < list>
2425#include < map>
@@ -717,7 +718,7 @@ class OmpAttributeVisitor : DirectiveAttributeVisitor<llvm::omp::Directive> {
717718 void CheckDataCopyingClause (
718719 const parser::Name &, const Symbol &, Symbol::Flag);
719720 void CheckAssocLoopLevel (std::int64_t level, const parser::OmpClause *clause);
720- void CheckObjectInNamelist (
721+ void CheckObjectInNamelistOrAssociate (
721722 const parser::Name &, const Symbol &, Symbol::Flag);
722723 void CheckSourceLabel (const parser::Label &);
723724 void CheckLabelContext (const parser::CharBlock, const parser::CharBlock,
@@ -2356,7 +2357,7 @@ void OmpAttributeVisitor::ResolveOmpObject(
23562357 CheckMultipleAppearances (*name, *symbol, ompFlag);
23572358 }
23582359 if (privateDataSharingAttributeFlags.test (ompFlag)) {
2359- CheckObjectInNamelist (*name, *symbol, ompFlag);
2360+ CheckObjectInNamelistOrAssociate (*name, *symbol, ompFlag);
23602361 }
23612362
23622363 if (ompFlag == Symbol::Flag::OmpAllocate) {
@@ -2713,7 +2714,7 @@ void OmpAttributeVisitor::CheckDataCopyingClause(
27132714 }
27142715}
27152716
2716- void OmpAttributeVisitor::CheckObjectInNamelist (
2717+ void OmpAttributeVisitor::CheckObjectInNamelistOrAssociate (
27172718 const parser::Name &name, const Symbol &symbol, Symbol::Flag ompFlag) {
27182719 const auto &ultimateSymbol{symbol.GetUltimate ()};
27192720 llvm::StringRef clauseName{" PRIVATE" };
@@ -2728,6 +2729,12 @@ void OmpAttributeVisitor::CheckObjectInNamelist(
27282729 " Variable '%s' in NAMELIST cannot be in a %s clause" _err_en_US,
27292730 name.ToString (), clauseName.str ());
27302731 }
2732+
2733+ if (ultimateSymbol.has <AssocEntityDetails>()) {
2734+ context_.Say (name.source ,
2735+ " Variable '%s' in ASSOCIATE cannot be in a %s clause" _err_en_US,
2736+ name.ToString (), clauseName.str ());
2737+ }
27312738}
27322739
27332740void OmpAttributeVisitor::CheckSourceLabel (const parser::Label &label) {
0 commit comments