https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122306

--- Comment #3 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Paul-Antoine Arras <[email protected]>:

https://gcc.gnu.org/g:80af807e52e4f4c480454e5a54aaeb7ce44556fd

commit r16-4540-g80af807e52e4f4c480454e5a54aaeb7ce44556fd
Author: Paul-Antoine Arras <[email protected]>
Date:   Thu Oct 16 17:22:08 2025 +0100

    OpenMP: Handle non-executable directives in intervening code
[PR120180,PR122306]

    OpenMP 6 permits non-executable directives in intervening code; this commit
adds
    support for a sensible subset, namely metadirectives, nothing, assume, and
    'error at(compilation)'.
    Also handle the special case where a metadirective can be resolved at parse
time
    to 'omp nothing'.
    This fixes a build issue that affects 10 out 12 SPECaccel benchmarks.

    Co-authored by: Tobias Burnus <[email protected]>

            PR c/120180
            PR fortran/122306

    gcc/c/ChangeLog:

            * c-parser.cc (c_parser_pragma): Accept a subset of non-executable
            OpenMP directives in intervening code.
            (c_parser_omp_error): Reject 'error at(execution)' in intervening
code.
            (c_parser_omp_metadirective): Return early if only one selector
matches
            and it resolves to 'omp nothing'.

    gcc/cp/ChangeLog:

            * parser.cc (cp_parser_omp_metadirective): Return early if only one
            selector matches and it resolves to 'omp nothing'.
            (cp_parser_omp_error): Reject 'error at(execution)' in intervening
code.
            (cp_parser_pragma): Accept a subset of non-executable OpenMP
directives
            as intervening code.

    gcc/fortran/ChangeLog:

            * gfortran.h (enum gfc_exec_op): Add EXEC_OMP_FIRST_OPENMP_EXEC and
            EXEC_OMP_LAST_OPENMP_EXEC.
            * openmp.cc (gfc_match_omp_context_selector): Remove static. Remove
            checks on score. Add cleanup. Remove checks on trait properties.
            (gfc_match_omp_context_selector_specification): Remove static.
Adjust
            calls to gfc_match_omp_context_selector.
            (gfc_match_omp_declare_variant): Adjust call to
            gfc_match_omp_context_selector_specification.
            (match_omp_metadirective): Likewise.
            (icode_code_error_callback): Reject all statements except
            'assume' and 'metadirective'.
            (gfc_resolve_omp_context_selector): New function.
            (resolve_omp_metadirective): Skip metadirectives which context
selectors
            can be statically resolved to false. Replace metadirective by its
body
            if only 'nothing' remains.
            (gfc_resolve_omp_declare): Call gfc_resolve_omp_context_selector
for
            each variant.

    gcc/testsuite/ChangeLog:

            * c-c++-common/gomp/imperfect1.c: Adjust dg-error.
            * c-c++-common/gomp/imperfect4.c: Likewise.
            * c-c++-common/gomp/pr120180.c: Move to...
            * c-c++-common/gomp/pr120180-1.c: ...here. Remove dg-error.
            * g++.dg/gomp/attrs-imperfect1.C: Adjust dg-error.
            * g++.dg/gomp/attrs-imperfect4.C: Likewise.
            * gfortran.dg/gomp/declare-variant-2.f90: Adjust dg-error.
            * gfortran.dg/gomp/declare-variant-20.f90: Likewise.
            * c-c++-common/gomp/pr120180-2.c: New test.
            * g++.dg/gomp/pr120180-1.C: New test.
            * gfortran.dg/gomp/pr120180-1.f90: New test.
            * gfortran.dg/gomp/pr120180-2.f90: New test.
            * gfortran.dg/gomp/pr122306-1.f90: New file.
            * gfortran.dg/gomp/pr122306-2.f90: New file.

Reply via email to