[flang] [OpenMP] structural checks for PARALLEL SECTIONS

Original-commit: flang-compiler/f18@c18452159d
This commit is contained in:
Jinxin Yang 2019-08-27 13:55:18 -07:00 committed by Jinxin (Brian) Yang
parent ffb88549cb
commit f6273d7194
2 changed files with 30 additions and 1 deletions

View file

@ -277,7 +277,14 @@ void OmpStructureChecker::Enter(const parser::OpenMPSectionsConstruct &x) {
SetContextAllowed(allowed);
} break;
case parser::OmpSectionsDirective::Directive::ParallelSections: {
// TODO
PushContext(beginDir.source, OmpDirective::PARALLEL_SECTIONS);
OmpClauseSet allowed{OmpClause::DEFAULT, OmpClause::PRIVATE,
OmpClause::FIRSTPRIVATE, OmpClause::LASTPRIVATE, OmpClause::SHARED,
OmpClause::COPYIN, OmpClause::REDUCTION};
SetContextAllowed(allowed);
OmpClauseSet allowedOnce{
OmpClause::IF, OmpClause::NUM_THREADS, OmpClause::PROC_BIND};
SetContextAllowedOnce(allowedOnce);
} break;
}
}

View file

@ -210,6 +210,28 @@
!$omp end sections num_threads(4)
!$omp end parallel
! 2.11.2 parallel-sections-clause -> parallel-clause |
! sections-clause
!$omp parallel sections num_threads(4) private(b) lastprivate(d)
a = 0.0
!$omp section
b = 1
c = 2
!$omp section
d = 3
!$omp end parallel sections
!ERROR: At most one NUM_THREADS clause can appear on the PARALLEL SECTIONS directive
!$omp parallel sections num_threads(1) num_threads(4)
a = 0.0
!ERROR: Unmatched END SECTIONS directive
!$omp end sections
!$omp parallel sections
!ERROR: NOWAIT clause is not allowed on the END PARALLEL SECTIONS directive
!$omp end parallel sections nowait
! 2.7.3 single-clause -> private-clause |
! firstprivate-clause
! end-single-clause -> copyprivate-clause |