diff --git a/flang/lib/Semantics/resolve-directives.cpp b/flang/lib/Semantics/resolve-directives.cpp index 4aecb8b8e7b47..01ce8d989fdd1 100644 --- a/flang/lib/Semantics/resolve-directives.cpp +++ b/flang/lib/Semantics/resolve-directives.cpp @@ -2152,7 +2152,9 @@ void OmpAttributeVisitor::CreateImplicitSymbols( dirContext.defaultDSA == Symbol::Flag::OmpShared) { // 1) default // Allowed only with parallel, teams and task generating constructs. - assert(parallelDir || taskGenDir || teamsDir); + if (!parallelDir && !taskGenDir && !teamsDir) { + return; + } if (dirContext.defaultDSA != Symbol::Flag::OmpShared) makePrivateSymbol(dirContext.defaultDSA); else diff --git a/flang/test/Semantics/OpenMP/default.f90 b/flang/test/Semantics/OpenMP/default.f90 index 94de7fa468692..a8d170724c12c 100644 --- a/flang/test/Semantics/OpenMP/default.f90 +++ b/flang/test/Semantics/OpenMP/default.f90 @@ -31,4 +31,13 @@ program omp_default end do !$omp end teams + !$omp parallel + !ERROR: DEFAULT clause is not allowed on the DO directive + !$omp do default(private) + do i = 1, 10 + k = i + end do + !$omp end do + !$omp end parallel + end program omp_default