diff --git a/flang/lib/Semantics/resolve-directives.cpp b/flang/lib/Semantics/resolve-directives.cpp index dbc531372c3f4..ea23f42fb5707 100644 --- a/flang/lib/Semantics/resolve-directives.cpp +++ b/flang/lib/Semantics/resolve-directives.cpp @@ -2108,9 +2108,11 @@ void OmpAttributeVisitor::Post(const parser::Name &name) { dirContext.defaultDSA == Symbol::Flag::OmpFirstPrivate || dirContext.defaultDSA == Symbol::Flag::OmpShared) { // 1) default - // Allowed only with parallel, teams and task generating constructs. - assert(parallelDir || taskGenDir || - llvm::omp::allTeamsSet.test(dirContext.directive)); + // Allowed only with parallel, teams and task generating constructs, + // skip creating symbols thus. + if (!(parallelDir || taskGenDir || + llvm::omp::allTeamsSet.test(dirContext.directive))) + return; if (dirContext.defaultDSA != Symbol::Flag::OmpShared) declNewSymbol(dirContext.defaultDSA); else diff --git a/flang/test/Semantics/OpenMP/ordered01.f90 b/flang/test/Semantics/OpenMP/ordered01.f90 index 9433120fab10f..8cadb13ef4b83 100644 --- a/flang/test/Semantics/OpenMP/ordered01.f90 +++ b/flang/test/Semantics/OpenMP/ordered01.f90 @@ -7,6 +7,13 @@ program main integer :: i, N = 10 real :: a, arrayA(10), arrayB(10), arrayC(10) real, external :: foo, bar, baz + + !ERROR: DEFAULT clause is not allowed on the DO directive + !$omp do default(private) + do i = 1, N + arrayA(i) = arrayA(i) + 1 + end do + !$omp end do !$omp do ordered do i = 1, N