|
21 | 21 | #include "flang/Semantics/expression.h" |
22 | 22 | #include "flang/Semantics/symbol.h" |
23 | 23 | #include "flang/Semantics/tools.h" |
24 | | -#include <iostream> |
25 | 24 | #include <list> |
26 | 25 | #include <map> |
27 | 26 | #include <sstream> |
@@ -459,16 +458,12 @@ class OmpAttributeVisitor : DirectiveAttributeVisitor<llvm::omp::Directive> { |
459 | 458 | } |
460 | 459 |
|
461 | 460 | // 2.15.3 Data-Sharing Attribute Clauses |
462 | | - void ResolveNames(const parser::OmpObjectList &objList); |
463 | | - |
464 | 461 | bool Pre(const parser::OmpClause::Inclusive &x) { |
465 | | - const auto &objectList{x.v}; |
466 | | - ResolveNames(objectList); |
| 462 | + ResolveOmpObjectList(x.v, Symbol::Flag::OmpInclusiveScan); |
467 | 463 | return false; |
468 | 464 | } |
469 | 465 | bool Pre(const parser::OmpClause::Exclusive &x) { |
470 | | - const auto &objectList{x.v}; |
471 | | - ResolveNames(objectList); |
| 466 | + ResolveOmpObjectList(x.v, Symbol::Flag::OmpExclusiveScan); |
472 | 467 | return false; |
473 | 468 | } |
474 | 469 | void Post(const parser::OmpDefaultClause &); |
@@ -705,8 +700,9 @@ class OmpAttributeVisitor : DirectiveAttributeVisitor<llvm::omp::Directive> { |
705 | 700 | Symbol::Flag::OmpUseDevicePtr, Symbol::Flag::OmpUseDeviceAddr, |
706 | 701 | Symbol::Flag::OmpIsDevicePtr, Symbol::Flag::OmpHasDeviceAddr}; |
707 | 702 |
|
708 | | - Symbol::Flags ompFlagsRequireMark{ |
709 | | - Symbol::Flag::OmpThreadprivate, Symbol::Flag::OmpDeclareTarget}; |
| 703 | + Symbol::Flags ompFlagsRequireMark{Symbol::Flag::OmpThreadprivate, |
| 704 | + Symbol::Flag::OmpDeclareTarget, Symbol::Flag::OmpExclusiveScan, |
| 705 | + Symbol::Flag::OmpInclusiveScan}; |
710 | 706 |
|
711 | 707 | Symbol::Flags dataCopyingAttributeFlags{ |
712 | 708 | Symbol::Flag::OmpCopyIn, Symbol::Flag::OmpCopyPrivate}; |
@@ -2970,19 +2966,4 @@ void OmpAttributeVisitor::IssueNonConformanceWarning( |
2970 | 2966 | context_.Warn(common::UsageWarning::OpenMPUsage, source, "%s"_warn_en_US, |
2971 | 2967 | warnStrOS.str()); |
2972 | 2968 | } |
2973 | | -void OmpAttributeVisitor::ResolveNames(const parser::OmpObjectList &objList) { |
2974 | | - for (const auto &ompObj : objList.v) { |
2975 | | - common::visit( |
2976 | | - common::visitors{ |
2977 | | - [&](const parser::Designator &designator) { |
2978 | | - if (const auto *name{ |
2979 | | - semantics::getDesignatorNameIfDataRef(designator)}) { |
2980 | | - ResolveName(name); |
2981 | | - } |
2982 | | - }, |
2983 | | - [&](const auto &name) { ResolveName(&name); }, |
2984 | | - }, |
2985 | | - ompObj.u); |
2986 | | - } |
2987 | | -} |
2988 | 2969 | } // namespace Fortran::semantics |
0 commit comments