@@ -337,24 +337,22 @@ void OmpStructureChecker::CheckMultListItems() {
337
337
semantics::UnorderedSymbolSet listVars;
338
338
339
339
// 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 )};
344
342
const auto &alignedList{std::get<0 >(alignedClause.v .t )};
345
343
std::list<parser::Name> alignedNameList;
346
344
for (const auto &ompObject : alignedList.v ) {
347
345
if (const auto *name{parser::Unwrap<parser::Name>(ompObject)}) {
348
346
if (name->symbol ) {
349
347
if (FindCommonBlockContaining (*(name->symbol ))) {
350
- context_.Say (itr-> second ->source ,
348
+ context_.Say (clause ->source ,
351
349
" '%s' is a common block name and can not appear in an "
352
350
" ALIGNED clause" _err_en_US,
353
351
name->ToString ());
354
352
} else if (!(IsBuiltinCPtr (*(name->symbol )) ||
355
353
IsAllocatableOrObjectPointer (
356
354
&name->symbol ->GetUltimate ()))) {
357
- context_.Say (itr-> second ->source ,
355
+ context_.Say (clause ->source ,
358
356
" '%s' in ALIGNED clause must be of type C_PTR, POINTER or "
359
357
" ALLOCATABLE" _err_en_US,
360
358
name->ToString ());
@@ -368,18 +366,16 @@ void OmpStructureChecker::CheckMultListItems() {
368
366
}
369
367
}
370
368
CheckMultipleOccurrence (
371
- listVars, alignedNameList, itr-> second ->source , " ALIGNED" );
369
+ listVars, alignedNameList, clause ->source , " ALIGNED" );
372
370
}
373
371
374
372
// 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)) {
378
374
const auto &nontempClause{
379
- std::get<parser::OmpClause::Nontemporal>(itr-> second ->u )};
375
+ std::get<parser::OmpClause::Nontemporal>(clause ->u )};
380
376
const auto &nontempNameList{nontempClause.v };
381
377
CheckMultipleOccurrence (
382
- listVars, nontempNameList, itr-> second ->source , " NONTEMPORAL" );
378
+ listVars, nontempNameList, clause ->source , " NONTEMPORAL" );
383
379
}
384
380
}
385
381
@@ -1688,21 +1684,18 @@ void OmpStructureChecker::ChecksOnOrderedAsStandalone() {
1688
1684
}};
1689
1685
1690
1686
// 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 )};
1695
1689
if (auto *doAcross{std::get_if<parser::OmpDoacross>(&dependClause.v .u )}) {
1696
- visitDoacross (*doAcross, itr-> second ->source );
1690
+ visitDoacross (*doAcross, clause ->source );
1697
1691
} else {
1698
- context_.Say (itr-> second ->source ,
1692
+ context_.Say (clause ->source ,
1699
1693
" Only SINK or SOURCE dependence types are allowed when ORDERED construct is a standalone construct with no ORDERED region" _err_en_US);
1700
1694
}
1701
1695
}
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 );
1706
1699
}
1707
1700
1708
1701
bool isNestedInDoOrderedWithPara{false };
@@ -1741,17 +1734,15 @@ void OmpStructureChecker::CheckOrderedDependClause(
1741
1734
}
1742
1735
}
1743
1736
}};
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 )};
1747
1739
if (auto *doAcross{std::get_if<parser::OmpDoacross>(&dependClause.v .u )}) {
1748
- visitDoacross (*doAcross, itr-> second ->source );
1740
+ visitDoacross (*doAcross, clause ->source );
1749
1741
}
1750
1742
}
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 );
1755
1746
}
1756
1747
}
1757
1748
@@ -3829,19 +3820,16 @@ void OmpStructureChecker::Enter(const parser::OmpClause::UseDevicePtr &x) {
3829
3820
SymbolSourceMap currSymbols;
3830
3821
GetSymbolsInObjectList (x.v , currSymbols);
3831
3822
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)) {
3835
3824
const auto &useDevicePtrClause{
3836
- std::get<parser::OmpClause::UseDevicePtr>(itr-> second ->u )};
3825
+ std::get<parser::OmpClause::UseDevicePtr>(clause ->u )};
3837
3826
const auto &useDevicePtrList{useDevicePtrClause.v };
3838
3827
std::list<parser::Name> useDevicePtrNameList;
3839
3828
for (const auto &ompObject : useDevicePtrList.v ) {
3840
3829
if (const auto *name{parser::Unwrap<parser::Name>(ompObject)}) {
3841
3830
if (name->symbol ) {
3842
3831
if (!(IsBuiltinCPtr (*(name->symbol )))) {
3843
- context_.Warn (common::UsageWarning::OpenMPUsage,
3844
- itr->second ->source ,
3832
+ context_.Warn (common::UsageWarning::OpenMPUsage, clause->source ,
3845
3833
" Use of non-C_PTR type '%s' in USE_DEVICE_PTR is deprecated, use USE_DEVICE_ADDR instead" _warn_en_US,
3846
3834
name->ToString ());
3847
3835
} else {
@@ -3851,7 +3839,7 @@ void OmpStructureChecker::Enter(const parser::OmpClause::UseDevicePtr &x) {
3851
3839
}
3852
3840
}
3853
3841
CheckMultipleOccurrence (
3854
- listVars, useDevicePtrNameList, itr-> second ->source , " USE_DEVICE_PTR" );
3842
+ listVars, useDevicePtrNameList, clause ->source , " USE_DEVICE_PTR" );
3855
3843
}
3856
3844
}
3857
3845
@@ -3861,12 +3849,9 @@ void OmpStructureChecker::Enter(const parser::OmpClause::UseDeviceAddr &x) {
3861
3849
SymbolSourceMap currSymbols;
3862
3850
GetSymbolsInObjectList (x.v , currSymbols);
3863
3851
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)) {
3868
3853
const auto &useDeviceAddrClause{
3869
- std::get<parser::OmpClause::UseDeviceAddr>(itr-> second ->u )};
3854
+ std::get<parser::OmpClause::UseDeviceAddr>(clause ->u )};
3870
3855
const auto &useDeviceAddrList{useDeviceAddrClause.v };
3871
3856
std::list<parser::Name> useDeviceAddrNameList;
3872
3857
for (const auto &ompObject : useDeviceAddrList.v ) {
@@ -3876,8 +3861,8 @@ void OmpStructureChecker::Enter(const parser::OmpClause::UseDeviceAddr &x) {
3876
3861
}
3877
3862
}
3878
3863
}
3879
- CheckMultipleOccurrence (listVars, useDeviceAddrNameList,
3880
- itr-> second ->source , " USE_DEVICE_ADDR" );
3864
+ CheckMultipleOccurrence (
3865
+ listVars, useDeviceAddrNameList, clause ->source , " USE_DEVICE_ADDR" );
3881
3866
}
3882
3867
}
3883
3868
@@ -3886,26 +3871,24 @@ void OmpStructureChecker::Enter(const parser::OmpClause::IsDevicePtr &x) {
3886
3871
SymbolSourceMap currSymbols;
3887
3872
GetSymbolsInObjectList (x.v , currSymbols);
3888
3873
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)) {
3892
3875
const auto &isDevicePtrClause{
3893
- std::get<parser::OmpClause::IsDevicePtr>(itr-> second ->u )};
3876
+ std::get<parser::OmpClause::IsDevicePtr>(clause ->u )};
3894
3877
const auto &isDevicePtrList{isDevicePtrClause.v };
3895
3878
SymbolSourceMap currSymbols;
3896
3879
GetSymbolsInObjectList (isDevicePtrList, currSymbols);
3897
3880
for (auto &[symbol, source] : currSymbols) {
3898
3881
if (!(IsBuiltinCPtr (*symbol))) {
3899
- context_.Say (itr-> second ->source ,
3882
+ context_.Say (clause ->source ,
3900
3883
" Variable '%s' in IS_DEVICE_PTR clause must be of type C_PTR" _err_en_US,
3901
3884
source.ToString ());
3902
3885
} else if (!(IsDummy (*symbol))) {
3903
- context_.Warn (common::UsageWarning::OpenMPUsage, itr-> second ->source ,
3886
+ context_.Warn (common::UsageWarning::OpenMPUsage, clause ->source ,
3904
3887
" Variable '%s' in IS_DEVICE_PTR clause must be a dummy argument. "
3905
3888
" This semantic check is deprecated from OpenMP 5.2 and later." _warn_en_US,
3906
3889
source.ToString ());
3907
3890
} else if (IsAllocatableOrPointer (*symbol) || IsValue (*symbol)) {
3908
- context_.Warn (common::UsageWarning::OpenMPUsage, itr-> second ->source ,
3891
+ context_.Warn (common::UsageWarning::OpenMPUsage, clause ->source ,
3909
3892
" Variable '%s' in IS_DEVICE_PTR clause must be a dummy argument "
3910
3893
" that does not have the ALLOCATABLE, POINTER or VALUE attribute. "
3911
3894
" 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) {
3920
3903
SymbolSourceMap currSymbols;
3921
3904
GetSymbolsInObjectList (x.v , currSymbols);
3922
3905
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)) {
3927
3907
const auto &hasDeviceAddrClause{
3928
- std::get<parser::OmpClause::HasDeviceAddr>(itr-> second ->u )};
3908
+ std::get<parser::OmpClause::HasDeviceAddr>(clause ->u )};
3929
3909
const auto &hasDeviceAddrList{hasDeviceAddrClause.v };
3930
3910
std::list<parser::Name> hasDeviceAddrNameList;
3931
3911
for (const auto &ompObject : hasDeviceAddrList.v ) {
0 commit comments