@@ -337,24 +337,22 @@ void OmpStructureChecker::CheckMultListItems() {
337337 semantics::UnorderedSymbolSet listVars;
338338
339339 // Aligned clause
340- auto alignedClauses{FindClauses (llvm::omp::Clause::OMPC_aligned)};
341- for (auto itr = alignedClauses.first ; itr != alignedClauses.second ; ++itr) {
342- const auto &alignedClause{
343- std::get<parser::OmpClause::Aligned>(itr->second ->u )};
340+ for (auto [_, clause] : GetClauses (llvm::omp::Clause::OMPC_aligned)) {
341+ const auto &alignedClause{std::get<parser::OmpClause::Aligned>(clause->u )};
344342 const auto &alignedList{std::get<0 >(alignedClause.v .t )};
345343 std::list<parser::Name> alignedNameList;
346344 for (const auto &ompObject : alignedList.v ) {
347345 if (const auto *name{parser::Unwrap<parser::Name>(ompObject)}) {
348346 if (name->symbol ) {
349347 if (FindCommonBlockContaining (*(name->symbol ))) {
350- context_.Say (itr-> second ->source ,
348+ context_.Say (clause ->source ,
351349 " '%s' is a common block name and can not appear in an "
352350 " ALIGNED clause" _err_en_US,
353351 name->ToString ());
354352 } else if (!(IsBuiltinCPtr (*(name->symbol )) ||
355353 IsAllocatableOrObjectPointer (
356354 &name->symbol ->GetUltimate ()))) {
357- context_.Say (itr-> second ->source ,
355+ context_.Say (clause ->source ,
358356 " '%s' in ALIGNED clause must be of type C_PTR, POINTER or "
359357 " ALLOCATABLE" _err_en_US,
360358 name->ToString ());
@@ -368,18 +366,16 @@ void OmpStructureChecker::CheckMultListItems() {
368366 }
369367 }
370368 CheckMultipleOccurrence (
371- listVars, alignedNameList, itr-> second ->source , " ALIGNED" );
369+ listVars, alignedNameList, clause ->source , " ALIGNED" );
372370 }
373371
374372 // Nontemporal clause
375- auto nonTemporalClauses{FindClauses (llvm::omp::Clause::OMPC_nontemporal)};
376- for (auto itr = nonTemporalClauses.first ; itr != nonTemporalClauses.second ;
377- ++itr) {
373+ for (auto [_, clause] : GetClauses (llvm::omp::Clause::OMPC_nontemporal)) {
378374 const auto &nontempClause{
379- std::get<parser::OmpClause::Nontemporal>(itr-> second ->u )};
375+ std::get<parser::OmpClause::Nontemporal>(clause ->u )};
380376 const auto &nontempNameList{nontempClause.v };
381377 CheckMultipleOccurrence (
382- listVars, nontempNameList, itr-> second ->source , " NONTEMPORAL" );
378+ listVars, nontempNameList, clause ->source , " NONTEMPORAL" );
383379 }
384380}
385381
@@ -1688,21 +1684,18 @@ void OmpStructureChecker::ChecksOnOrderedAsStandalone() {
16881684 }};
16891685
16901686 // Visit the DEPEND and DOACROSS clauses.
1691- auto depClauses{FindClauses (llvm::omp::Clause::OMPC_depend)};
1692- for (auto itr{depClauses.first }; itr != depClauses.second ; ++itr) {
1693- const auto &dependClause{
1694- std::get<parser::OmpClause::Depend>(itr->second ->u )};
1687+ for (auto [_, clause] : GetClauses (llvm::omp::Clause::OMPC_depend)) {
1688+ const auto &dependClause{std::get<parser::OmpClause::Depend>(clause->u )};
16951689 if (auto *doAcross{std::get_if<parser::OmpDoacross>(&dependClause.v .u )}) {
1696- visitDoacross (*doAcross, itr-> second ->source );
1690+ visitDoacross (*doAcross, clause ->source );
16971691 } else {
1698- context_.Say (itr-> second ->source ,
1692+ context_.Say (clause ->source ,
16991693 " Only SINK or SOURCE dependence types are allowed when ORDERED construct is a standalone construct with no ORDERED region" _err_en_US);
17001694 }
17011695 }
1702- auto doaClauses{FindClauses (llvm::omp::Clause::OMPC_doacross)};
1703- for (auto itr{doaClauses.first }; itr != doaClauses.second ; ++itr) {
1704- auto &doaClause{std::get<parser::OmpClause::Doacross>(itr->second ->u )};
1705- visitDoacross (doaClause.v .v , itr->second ->source );
1696+ for (auto [_, clause] : GetClauses (llvm::omp::Clause::OMPC_doacross)) {
1697+ auto &doaClause{std::get<parser::OmpClause::Doacross>(clause->u )};
1698+ visitDoacross (doaClause.v .v , clause->source );
17061699 }
17071700
17081701 bool isNestedInDoOrderedWithPara{false };
@@ -1741,17 +1734,15 @@ void OmpStructureChecker::CheckOrderedDependClause(
17411734 }
17421735 }
17431736 }};
1744- auto depClauses{FindClauses (llvm::omp::Clause::OMPC_depend)};
1745- for (auto itr{depClauses.first }; itr != depClauses.second ; ++itr) {
1746- auto &dependClause{std::get<parser::OmpClause::Depend>(itr->second ->u )};
1737+ for (auto [_, clause] : GetClauses (llvm::omp::Clause::OMPC_depend)) {
1738+ auto &dependClause{std::get<parser::OmpClause::Depend>(clause->u )};
17471739 if (auto *doAcross{std::get_if<parser::OmpDoacross>(&dependClause.v .u )}) {
1748- visitDoacross (*doAcross, itr-> second ->source );
1740+ visitDoacross (*doAcross, clause ->source );
17491741 }
17501742 }
1751- auto doaClauses = FindClauses (llvm::omp::Clause::OMPC_doacross);
1752- for (auto itr{doaClauses.first }; itr != doaClauses.second ; ++itr) {
1753- auto &doaClause{std::get<parser::OmpClause::Doacross>(itr->second ->u )};
1754- visitDoacross (doaClause.v .v , itr->second ->source );
1743+ for (auto [_, clause] : GetClauses (llvm::omp::Clause::OMPC_doacross)) {
1744+ auto &doaClause{std::get<parser::OmpClause::Doacross>(clause->u )};
1745+ visitDoacross (doaClause.v .v , clause->source );
17551746 }
17561747}
17571748
@@ -3829,19 +3820,16 @@ void OmpStructureChecker::Enter(const parser::OmpClause::UseDevicePtr &x) {
38293820 SymbolSourceMap currSymbols;
38303821 GetSymbolsInObjectList (x.v , currSymbols);
38313822 semantics::UnorderedSymbolSet listVars;
3832- auto useDevicePtrClauses{FindClauses (llvm::omp::Clause::OMPC_use_device_ptr)};
3833- for (auto itr = useDevicePtrClauses.first ; itr != useDevicePtrClauses.second ;
3834- ++itr) {
3823+ for (auto [_, clause] : GetClauses (llvm::omp::Clause::OMPC_use_device_ptr)) {
38353824 const auto &useDevicePtrClause{
3836- std::get<parser::OmpClause::UseDevicePtr>(itr-> second ->u )};
3825+ std::get<parser::OmpClause::UseDevicePtr>(clause ->u )};
38373826 const auto &useDevicePtrList{useDevicePtrClause.v };
38383827 std::list<parser::Name> useDevicePtrNameList;
38393828 for (const auto &ompObject : useDevicePtrList.v ) {
38403829 if (const auto *name{parser::Unwrap<parser::Name>(ompObject)}) {
38413830 if (name->symbol ) {
38423831 if (!(IsBuiltinCPtr (*(name->symbol )))) {
3843- context_.Warn (common::UsageWarning::OpenMPUsage,
3844- itr->second ->source ,
3832+ context_.Warn (common::UsageWarning::OpenMPUsage, clause->source ,
38453833 " Use of non-C_PTR type '%s' in USE_DEVICE_PTR is deprecated, use USE_DEVICE_ADDR instead" _warn_en_US,
38463834 name->ToString ());
38473835 } else {
@@ -3851,7 +3839,7 @@ void OmpStructureChecker::Enter(const parser::OmpClause::UseDevicePtr &x) {
38513839 }
38523840 }
38533841 CheckMultipleOccurrence (
3854- listVars, useDevicePtrNameList, itr-> second ->source , " USE_DEVICE_PTR" );
3842+ listVars, useDevicePtrNameList, clause ->source , " USE_DEVICE_PTR" );
38553843 }
38563844}
38573845
@@ -3861,12 +3849,9 @@ void OmpStructureChecker::Enter(const parser::OmpClause::UseDeviceAddr &x) {
38613849 SymbolSourceMap currSymbols;
38623850 GetSymbolsInObjectList (x.v , currSymbols);
38633851 semantics::UnorderedSymbolSet listVars;
3864- auto useDeviceAddrClauses{
3865- FindClauses (llvm::omp::Clause::OMPC_use_device_addr)};
3866- for (auto itr = useDeviceAddrClauses.first ;
3867- itr != useDeviceAddrClauses.second ; ++itr) {
3852+ for (auto [_, clause] : GetClauses (llvm::omp::Clause::OMPC_use_device_addr)) {
38683853 const auto &useDeviceAddrClause{
3869- std::get<parser::OmpClause::UseDeviceAddr>(itr-> second ->u )};
3854+ std::get<parser::OmpClause::UseDeviceAddr>(clause ->u )};
38703855 const auto &useDeviceAddrList{useDeviceAddrClause.v };
38713856 std::list<parser::Name> useDeviceAddrNameList;
38723857 for (const auto &ompObject : useDeviceAddrList.v ) {
@@ -3876,8 +3861,8 @@ void OmpStructureChecker::Enter(const parser::OmpClause::UseDeviceAddr &x) {
38763861 }
38773862 }
38783863 }
3879- CheckMultipleOccurrence (listVars, useDeviceAddrNameList,
3880- itr-> second ->source , " USE_DEVICE_ADDR" );
3864+ CheckMultipleOccurrence (
3865+ listVars, useDeviceAddrNameList, clause ->source , " USE_DEVICE_ADDR" );
38813866 }
38823867}
38833868
@@ -3886,26 +3871,24 @@ void OmpStructureChecker::Enter(const parser::OmpClause::IsDevicePtr &x) {
38863871 SymbolSourceMap currSymbols;
38873872 GetSymbolsInObjectList (x.v , currSymbols);
38883873 semantics::UnorderedSymbolSet listVars;
3889- auto isDevicePtrClauses{FindClauses (llvm::omp::Clause::OMPC_is_device_ptr)};
3890- for (auto itr = isDevicePtrClauses.first ; itr != isDevicePtrClauses.second ;
3891- ++itr) {
3874+ for (auto [_, clause] : GetClauses (llvm::omp::Clause::OMPC_is_device_ptr)) {
38923875 const auto &isDevicePtrClause{
3893- std::get<parser::OmpClause::IsDevicePtr>(itr-> second ->u )};
3876+ std::get<parser::OmpClause::IsDevicePtr>(clause ->u )};
38943877 const auto &isDevicePtrList{isDevicePtrClause.v };
38953878 SymbolSourceMap currSymbols;
38963879 GetSymbolsInObjectList (isDevicePtrList, currSymbols);
38973880 for (auto &[symbol, source] : currSymbols) {
38983881 if (!(IsBuiltinCPtr (*symbol))) {
3899- context_.Say (itr-> second ->source ,
3882+ context_.Say (clause ->source ,
39003883 " Variable '%s' in IS_DEVICE_PTR clause must be of type C_PTR" _err_en_US,
39013884 source.ToString ());
39023885 } else if (!(IsDummy (*symbol))) {
3903- context_.Warn (common::UsageWarning::OpenMPUsage, itr-> second ->source ,
3886+ context_.Warn (common::UsageWarning::OpenMPUsage, clause ->source ,
39043887 " Variable '%s' in IS_DEVICE_PTR clause must be a dummy argument. "
39053888 " This semantic check is deprecated from OpenMP 5.2 and later." _warn_en_US,
39063889 source.ToString ());
39073890 } else if (IsAllocatableOrPointer (*symbol) || IsValue (*symbol)) {
3908- context_.Warn (common::UsageWarning::OpenMPUsage, itr-> second ->source ,
3891+ context_.Warn (common::UsageWarning::OpenMPUsage, clause ->source ,
39093892 " Variable '%s' in IS_DEVICE_PTR clause must be a dummy argument "
39103893 " that does not have the ALLOCATABLE, POINTER or VALUE attribute. "
39113894 " This semantic check is deprecated from OpenMP 5.2 and later." _warn_en_US,
@@ -3920,12 +3903,9 @@ void OmpStructureChecker::Enter(const parser::OmpClause::HasDeviceAddr &x) {
39203903 SymbolSourceMap currSymbols;
39213904 GetSymbolsInObjectList (x.v , currSymbols);
39223905 semantics::UnorderedSymbolSet listVars;
3923- auto hasDeviceAddrClauses{
3924- FindClauses (llvm::omp::Clause::OMPC_has_device_addr)};
3925- for (auto itr = hasDeviceAddrClauses.first ;
3926- itr != hasDeviceAddrClauses.second ; ++itr) {
3906+ for (auto [_, clause] : GetClauses (llvm::omp::Clause::OMPC_has_device_addr)) {
39273907 const auto &hasDeviceAddrClause{
3928- std::get<parser::OmpClause::HasDeviceAddr>(itr-> second ->u )};
3908+ std::get<parser::OmpClause::HasDeviceAddr>(clause ->u )};
39293909 const auto &hasDeviceAddrList{hasDeviceAddrClause.v };
39303910 std::list<parser::Name> hasDeviceAddrNameList;
39313911 for (const auto &ompObject : hasDeviceAddrList.v ) {
0 commit comments