| ! RUN: %flang_fc1 -fdebug-unparse -fopenmp %s | FileCheck --ignore-case %s |
| ! RUN: %flang_fc1 -fdebug-dump-parse-tree -fopenmp %s | FileCheck --check-prefix="PARSE-TREE" %s |
| |
| subroutine openmp_sections(x, y) |
| |
| integer, intent(inout)::x, y |
| |
| !============================================================================== |
| ! empty construct |
| !============================================================================== |
| !CHECK: !$omp sections |
| !$omp sections |
| !CHECK: !$omp section |
| !CHECK: !$omp end sections |
| !$omp end sections |
| |
| !PARSE-TREE: OpenMPConstruct -> OpenMPSectionsConstruct |
| !PARSE-TREE: OmpBeginSectionsDirective |
| !PARSE-TREE-NOT: ExecutionPartConstruct |
| !PARSE-TREE: OmpEndSectionsDirective |
| |
| !============================================================================== |
| ! single section, without `!$omp section` |
| !============================================================================== |
| !CHECK: !$omp sections |
| !$omp sections |
| !CHECK: !$omp section |
| !CHECK: CALL |
| call F1() |
| !CHECK: !$omp end sections |
| !$omp end sections |
| |
| !PARSE-TREE: OpenMPConstruct -> OpenMPSectionsConstruct |
| !PARSE-TREE: OmpBeginSectionsDirective |
| !PARSE-TREE: OpenMPConstruct -> OpenMPSectionConstruct -> Block |
| !PARSE-TREE: CallStmt |
| !PARSE-TREE-NOT: ExecutionPartConstruct |
| !PARSE-TREE: OmpEndSectionsDirective |
| |
| !============================================================================== |
| ! single section with `!$omp section` |
| !============================================================================== |
| !CHECK: !$omp sections |
| !$omp sections |
| !CHECK: !$omp section |
| !$omp section |
| !CHECK: CALL F1 |
| call F1 |
| !CHECK: !$omp end sections |
| !$omp end sections |
| |
| !PARSE-TREE: OpenMPConstruct -> OpenMPSectionsConstruct |
| !PARSE-TREE: OmpBeginSectionsDirective |
| !PARSE-TREE: OpenMPConstruct -> OpenMPSectionConstruct -> Block |
| !PARSE-TREE: CallStmt |
| !PARSE-TREE-NOT: ExecutionPartConstruct |
| !PARSE-TREE: OmpEndSectionsDirective |
| |
| !============================================================================== |
| ! multiple sections |
| !============================================================================== |
| !CHECK: !$omp sections |
| !$omp sections |
| !CHECK: !$omp section |
| !$omp section |
| !CHECK: CALL F1 |
| call F1 |
| !CHECK: !$omp section |
| !$omp section |
| !CHECK: CALL F2 |
| call F2 |
| !CHECK: !$omp section |
| !$omp section |
| !CHECK: CALL F3 |
| call F3 |
| !CHECK: !$omp end sections |
| !$omp end sections |
| |
| !PARSE-TREE: OpenMPConstruct -> OpenMPSectionsConstruct |
| !PARSE-TREE: OmpBeginSectionsDirective |
| !PARSE-TREE: OpenMPConstruct -> OpenMPSectionConstruct -> Block |
| !PARSE-TREE: CallStmt |
| !PARSE-TREE: OpenMPConstruct -> OpenMPSectionConstruct -> Block |
| !PARSE-TREE: CallStmt |
| !PARSE-TREE: OpenMPConstruct -> OpenMPSectionConstruct -> Block |
| !PARSE-TREE: CallStmt |
| !PARSE-TREE-NOT: ExecutionPartConstruct |
| !PARSE-TREE: OmpEndSectionsDirective |
| |
| !============================================================================== |
| ! multiple sections with clauses |
| !============================================================================== |
| !CHECK: !$omp sections PRIVATE(x) FIRSTPRIVATE(y) |
| !$omp sections PRIVATE(x) FIRSTPRIVATE(y) |
| !CHECK: !$omp section |
| !$omp section |
| !CHECK: CALL F1 |
| call F1 |
| !CHECK: !$omp section |
| !$omp section |
| !CHECK: CALL F2 |
| call F2 |
| !CHECK: !$omp section |
| !$omp section |
| !CHECK: CALL F3 |
| call F3 |
| !CHECK: !$omp end sections NOWAIT |
| !$omp end sections NOWAIT |
| |
| !PARSE-TREE: OpenMPConstruct -> OpenMPSectionsConstruct |
| !PARSE-TREE: OmpBeginSectionsDirective |
| !PARSE-TREE: OpenMPConstruct -> OpenMPSectionConstruct -> Block |
| !PARSE-TREE: CallStmt |
| !PARSE-TREE: OpenMPConstruct -> OpenMPSectionConstruct -> Block |
| !PARSE-TREE: CallStmt |
| !PARSE-TREE: OpenMPConstruct -> OpenMPSectionConstruct -> Block |
| !PARSE-TREE: CallStmt |
| !PARSE-TREE-NOT: ExecutionPartConstruct |
| !PARSE-TREE: OmpEndSectionsDirective |
| |
| END subroutine openmp_sections |