]> git.ipfire.org Git - thirdparty/gcc.git/commit
OpenMP: 'allocate' directive - fixes for 'alignof' and [[omp::decl]]
authorTobias Burnus <tburnus@baylibre.com>
Tue, 3 Dec 2024 10:02:03 +0000 (11:02 +0100)
committerTobias Burnus <tburnus@baylibre.com>
Tue, 3 Dec 2024 10:02:03 +0000 (11:02 +0100)
commit3d72e50caebf232fdd7f70613616ca4fd4fb472b
treeb60d11e53dc95961e103d8fd33daf22233a12203
parent83f22c1c526368cafc3d32f03462ecd7847f054f
OpenMP: 'allocate' directive - fixes for 'alignof' and [[omp::decl]]

Fixed a check to permit [[omp::decl(allocate,...)]] parsing in C.

Additionaly, we discussed that 'allocate align' should not affect
'alignof' to avoid issues like with:

  int a;
  _Alignas(_Alignof(a)) int b;
  #pragma omp allocate(a) align(128)
  _Alignas(_Alignof(a)) int c;

Thus, the alignment is no longer set in the C and Fortran front ends,
but for static variables now in varpool_node::finalize_decl.
(For stack variables, the alignment is handled in gimplify_bind_expr.)

NOTE: 'omp allocate' is not yet supported in C++.

gcc/c/ChangeLog:

* c-parser.cc (c_parser_omp_allocate): Only check scope if
not in_omp_decl_attribute. Remove setting the alignment.

gcc/ChangeLog:

* cgraphunit.cc (varpool_node::finalize_decl): Set alignment
based on OpenMP's 'omp allocate' attribute/directive.

gcc/fortran/ChangeLog:

* trans-decl.cc (gfc_finish_var_decl): Remove setting the alignment.

libgomp/ChangeLog:

* libgomp.texi (Memory allocation): Mention (non-)effect of 'align'
on _Alignof.
* testsuite/libgomp.c/allocate-7.c: New test.

gcc/testsuite/ChangeLog:

* c-c++-common/gomp/allocate-18.c: Check that alignof is unaffected
by 'omp allocate'.
* c-c++-common/gomp/allocate-19.c: Likewise.
gcc/c/c-parser.cc
gcc/cgraphunit.cc
gcc/fortran/trans-decl.cc
gcc/testsuite/c-c++-common/gomp/allocate-18.c
gcc/testsuite/c-c++-common/gomp/allocate-19.c
libgomp/libgomp.texi
libgomp/testsuite/libgomp.c/allocate-7.c [new file with mode: 0644]