[AST][OpenMP] OpenMP Sections / Section constructs contain Structured blocks


[AST][OpenMP] OpenMP Sections / Section constructs contain Structured blocks

I'm working on a clang-tidy check, much like existing bugprone-exception-escape,
to detect when an exception might escape out of an OpenMP construct it isn't supposed to escape from.
For that i will be using the nothrow bit of CapturedDecls.

While that bit is already correctly set for some constructs, e.g. #pragma omp parallel: https://godbolt.org/z/2La7pv
it isn't set for the #pragma omp sections, or #pragma omp section: https://godbolt.org/z/qZ-EbP

If i'm reading OpenMP Application Programming Interface Version 5.0 November 2018 correctly,
they should be, as per 2.8.1 sections Construct, starting with page 86:

  • The sections construct is a non-iterative worksharing construct that contains a set of structured blocks that are to be distributed among and executed by the threads in a team. Each structured block is executed once by one of the threads in the team in the context of its implicit task.
  • The syntax of the sections construct is as follows: #pragma omp sections [clause[ [,] clause] ... ] new-line { [#pragma omp section new-line] structured-block ...
  • Description Each structured block in the sections construct is preceded by a section directive except possibly the first block, for which a preceding section directive is optional.
  • Restrictions • The code enclosed in a sections construct must be a structured block.
    • A throw executed inside a sections region must cause execution to resume within the same section of the sections region, and the same thread that threw the exception must catch it.

Reviewers: ABataev, #openmp

Reviewed By: ABataev

Subscribers: guansong, openmp-commits, cfe-commits

Tags: #clang, #openmp

Differential Revision: https://reviews.llvm.org/D57585