Fix-up for commit 7a8f98b48104ccf10c6dceccc51b70de69288eaa
"OpenMP: support for uses_allocators clause".

As was already pointed out, 'libgomp/config.h.in' was not regenerated.

In a configuration with:

    checking whether the target supports __sync_*_compare_and_swap... (cached) 
no

..., I see:

    configure: error: offload hosts require __sync_val_compare_and_swap to 
build libgomp.
    make[1]: *** [Makefile:17208: configure-target-libgomp] Error 1

Fixed the inverted condition.

Next, I see:

    ../../../source-gcc/libgomp/config/linux/../../allocator.c: In function 
‘omp_init_allocator’:
    ../../../source-gcc/libgomp/config/linux/../../allocator.c:619:28: error: 
passing argument 1 of ‘gomp_mutex_init’ makes pointer from integer without a 
cast [-Wint-conversion]
      619 |       gomp_mutex_init (data->lock);
          |                        ~~~~^~~~~~
          |                            |
          |                            gomp_mutex_t {aka int}
    ../../../source-gcc/libgomp/config/linux/../../allocator.c:619:28: note: 
possible fix: take the address with ‘&’
      619 |       gomp_mutex_init (data->lock);
          |                        ~~~~^~~~~~
          |                        &
    In file included from ../../../source-gcc/libgomp/libgomp.h:209,
                     from 
../../../source-gcc/libgomp/config/linux/allocator.c:31:
    ../../../source-gcc/libgomp/config/linux/mutex.h:41:32: note: expected 
‘gomp_mutex_t *’ {aka ‘int *’} but argument is of type ‘gomp_mutex_t’ {aka 
‘int’}
       41 | gomp_mutex_init (gomp_mutex_t *mutex)
          |                  ~~~~~~~~~~~~~~^~~~~
    ../../../source-gcc/libgomp/config/linux/../../allocator.c: In function 
‘gomp_map_omp_init_allocator’:
    ../../../source-gcc/libgomp/config/linux/../../allocator.c:1587:68: error: 
passing argument 1 of ‘gomp_mutex_init’ makes pointer from integer without a 
cast [-Wint-conversion]
     1587 |             (((struct omp_allocator_data *) 
allocator_data_devaddr)->lock);
          |              
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~
          |                                                                    |
          |                                                                    
gomp_mutex_t {aka int}
    ../../../source-gcc/libgomp/config/linux/../../allocator.c:1587:68: note: 
possible fix: take the address with ‘&’
     1587 |             (((struct omp_allocator_data *) 
allocator_data_devaddr)->lock);
          |              
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~
          |              &
    ../../../source-gcc/libgomp/config/linux/mutex.h:41:32: note: expected 
‘gomp_mutex_t *’ {aka ‘int *’} but argument is of type ‘gomp_mutex_t’ {aka 
‘int’}
       41 | gomp_mutex_init (gomp_mutex_t *mutex)
          |                  ~~~~~~~~~~~~~~^~~~~
    make[4]: *** [Makefile:819: allocator.lo] Error 1

Fixed.

Testing (with as well as without 'HAVE_SYNC_BUILTINS'):

I see:

    PASS: g++.dg/gomp/deprecate-2.C  -std=c++20  at line 31 (test for warnings, 
line 22)
    PASS: g++.dg/gomp/deprecate-2.C  -std=c++20  at line 43 (test for warnings, 
line 34)
    PASS: g++.dg/gomp/deprecate-2.C  -std=c++20  expected multiline pattern 
lines 24-27
    PASS: g++.dg/gomp/deprecate-2.C  -std=c++20  expected multiline pattern 
lines 36-39
    [-XFAIL:-]{+XPASS:+} g++.dg/gomp/deprecate-2.C  -std=c++20 (test for excess 
errors)
    [Etc.]

..., due to:

    { dg-excess-errors "sorry, unimplemented: 'uses_allocators' clause" }

Removed.

I see:

    {+PASS: libgomp.c++/../libgomp.c-c++-common/uses_allocators-2.c  (test for 
errors, line 9)+}
    {+FAIL: libgomp.c++/../libgomp.c-c++-common/uses_allocators-2.c (test for 
excess errors)+}

..., due to:

    [...]/libgomp.c++/../libgomp.c-c++-common/uses_allocators-2.c:7:34: error: 
invalid conversion from 'int' to 'omp_alloctrait_key_t' [-fpermissive]
    [...]/libgomp.c++/../libgomp.c-c++-common/uses_allocators-2.c:16:40: error: 
invalid conversion from 'int' to 'omp_alloctrait_key_t' [-fpermissive]

Replaced '1' by 'omp_atk_sync_hint'.

I see:

    {+FAIL: libgomp.c++/../libgomp.c-c++-common/uses_allocators-9.c (test for 
excess errors)+}
    {+UNRESOLVED: libgomp.c++/../libgomp.c-c++-common/uses_allocators-9.c 
compilation failed to produce executable+}

..., due to:

    [...]/libgomp.c++/../libgomp.c-c++-common/uses_allocators-9.c:11:24: error: 
invalid conversion from 'void*' to 'int*' [-fpermissive]
    [...]/libgomp.c++/../libgomp.c-c++-common/uses_allocators-9.c:21:24: error: 
invalid conversion from 'void*' to 'int*' [-fpermissive]
    [...]/libgomp.c++/../libgomp.c-c++-common/uses_allocators-9.c:33:32: error: 
invalid conversion from 'void*' to 'int*' [-fpermissive]

Added type casts.

I see:

    [-PASS:-]{+FAIL:+} libgomp.fortran/dep-uses-allocators.f90   -O   at line 
12 (test for warnings, line 11)
    PASS: libgomp.fortran/dep-uses-allocators.f90   -O   at line 2 (test for 
warnings, line 11)
    PASS: libgomp.fortran/dep-uses-allocators.f90   -O  (test for excess errors)

..., due to:

    { dg-message "sorry, unimplemented: 'uses_allocators' clause [...]

Removed.

I see:

    PASS: libgomp.fortran/uses_allocators-7.f90   -O  (test for excess errors)
    {+PASS: libgomp.fortran/uses_allocators-7.f90   -O  execution test+}
    {+PASS: libgomp.fortran/uses_allocators-7.f90   -O   scan-tree-dump-times 
gimple "#pragma omp target .*uses_allocators\\(memspace\\(\\), 
traits\\(trait\\) : my_alloc\\)" 1+}
    {+PASS: libgomp.fortran/uses_allocators-7.f90   -O   scan-tree-dump-times 
gimple "#pragma omp target .*uses_allocators\\(memspace\\(\\), traits\\(\\) : 
my_alloc\\)" 1+}
    {+FAIL: libgomp.fortran/uses_allocators-7.f90   -O   scan-tree-dump-times 
original "#pragma omp target .*uses_allocators\\(memspace\\(1\\), traits\\(\\) 
: my4\\) uses_allocators\\(memspace\\(\\), traits\\(t2\\) : my3\\) 
uses_allocators\\(memspace\\(\\), traits\\(\\) : my2\\) 
uses_allocators\\(memspace\\(3\\), traits\\(t\\) : my\\)" 1+}

XFAILed (for now.)

        gcc/testsuite/
        * g++.dg/gomp/deprecate-2.C: Remove obsolete 'dg-excess-errors'.
        libgomp/
        * config.h.in: Regenerate.
        * configure.ac [x$libgomp_cv_have_sync_builtins = xno]: Fix check.
        * configure: Regenerate.
        * allocator.c (omp_init_allocator, gomp_map_omp_init_allocator)
        [!HAVE_SYNC_BUILTINS]: Fix build.
        * testsuite/libgomp.c-c++-common/uses_allocators-2.c: Fix for C++ 
testing.
        * testsuite/libgomp.c-c++-common/uses_allocators-9.c: Likewise.
        * testsuite/libgomp.fortran/dep-uses-allocators.f90: Remove
        obsolete "sorry, unimplemented: [...]" diagnostic check.
        * testsuite/libgomp.fortran/uses_allocators-7.f90: XFAIL one
        'scan-tree-dump-times' check.
---
 gcc/testsuite/g++.dg/gomp/deprecate-2.C                    | 3 ---
 libgomp/allocator.c                                        | 4 ++--
 libgomp/config.h.in                                        | 3 +++
 libgomp/configure                                          | 2 +-
 libgomp/configure.ac                                       | 2 +-
 libgomp/testsuite/libgomp.c-c++-common/uses_allocators-2.c | 4 ++--
 libgomp/testsuite/libgomp.c-c++-common/uses_allocators-9.c | 6 +++---
 libgomp/testsuite/libgomp.fortran/dep-uses-allocators.f90  | 1 -
 libgomp/testsuite/libgomp.fortran/uses_allocators-7.f90    | 2 +-
 9 files changed, 13 insertions(+), 14 deletions(-)

diff --git a/gcc/testsuite/g++.dg/gomp/deprecate-2.C 
b/gcc/testsuite/g++.dg/gomp/deprecate-2.C
index 46d286141ef..b7689dd1554 100644
--- a/gcc/testsuite/g++.dg/gomp/deprecate-2.C
+++ b/gcc/testsuite/g++.dg/gomp/deprecate-2.C
@@ -42,6 +42,3 @@ void f()
 
 // { dg-warning "42: the specification of arguments to 'uses_allocators' where 
each item is of the form 'allocator\\(traits\\)' is deprecated since OpenMP 5.2 
\\\[-Wdeprecated-openmp\\\]" "" { target *-*-* }  34 }
 }
-
-// { dg-excess-errors "sorry, unimplemented: 'uses_allocators' clause" }
-// { dg-excess-errors "sorry, unimplemented: 'uses_allocators' clause" }
diff --git a/libgomp/allocator.c b/libgomp/allocator.c
index 5576d92e21d..dc1b79d9b83 100644
--- a/libgomp/allocator.c
+++ b/libgomp/allocator.c
@@ -616,7 +616,7 @@ omp_init_allocator (omp_memspace_handle_t memspace, int 
ntraits,
   else
     {
 #ifndef HAVE_SYNC_BUILTINS
-      gomp_mutex_init (data->lock);
+      gomp_mutex_init (&data->lock);
 #endif
     }
 
@@ -1584,7 +1584,7 @@ gomp_map_omp_init_allocator (struct gomp_device_descr 
*devicep,
                  sizeof (struct omp_allocator_data));
 #ifndef HAVE_SYNC_BUILTINS
          gomp_mutex_init
-           (((struct omp_allocator_data *) allocator_data_devaddr)->lock);
+           (&((struct omp_allocator_data *) allocator_data_devaddr)->lock);
 #endif
        }
       ret = (omp_allocator_handle_t) allocator_data_devaddr;
diff --git a/libgomp/config.h.in b/libgomp/config.h.in
index 46d3eac1e61..0522c50d34a 100644
--- a/libgomp/config.h.in
+++ b/libgomp/config.h.in
@@ -133,6 +133,9 @@
 /* Define to 1 if building libgomp for an accelerator-only target. */
 #undef LIBGOMP_OFFLOADED_ONLY
 
+/* Define to 1 if building libgomp for a offload host */
+#undef LIBGOMP_OFFLOAD_HOST
+
 /* Define to 1 if libgomp should use POSIX threads. */
 #undef LIBGOMP_USE_PTHREADS
 
diff --git a/libgomp/configure b/libgomp/configure
index 7877089755a..2f395a883f2 100755
--- a/libgomp/configure
+++ b/libgomp/configure
@@ -17134,7 +17134,7 @@ if test x$libgomp_cv_have_sync_builtins = xno; then
     as_fn_error $? "accelerator targets require __sync_val_compare_and_swap to 
build libgomp." "$LINENO" 5
   fi
   # Same for offload hosts.
-  if test x"$offload_plugins" = x; then
+  if test x"$offload_plugins" != x; then
     as_fn_error $? "offload hosts require __sync_val_compare_and_swap to build 
libgomp." "$LINENO" 5
   fi
 fi
diff --git a/libgomp/configure.ac b/libgomp/configure.ac
index 917079bc95b..057debe9214 100644
--- a/libgomp/configure.ac
+++ b/libgomp/configure.ac
@@ -378,7 +378,7 @@ if test x$libgomp_cv_have_sync_builtins = xno; then
     AC_MSG_ERROR([accelerator targets require __sync_val_compare_and_swap to 
build libgomp.])
   fi
   # Same for offload hosts.
-  if test x"$offload_plugins" = x; then
+  if test x"$offload_plugins" != x; then
     AC_MSG_ERROR([offload hosts require __sync_val_compare_and_swap to build 
libgomp.])
   fi
 fi
diff --git a/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-2.c 
b/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-2.c
index 2babb11018e..30fae752a33 100644
--- a/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-2.c
+++ b/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-2.c
@@ -4,7 +4,7 @@
 void
 f ()
 {
-   omp_alloctrait_t trait[1] = {{1,1}};
+   omp_alloctrait_t trait[1] = {{omp_atk_sync_hint, 1}};
    omp_allocator_handle_t my_alloc;
    #pragma omp target uses_allocators(traits(trait) : my_alloc)  /* { dg-error 
"traits array 'trait' must be of 'const omp_alloctrait_t \\\[\\\]' type" } */
      ;
@@ -13,7 +13,7 @@ f ()
 void
 g ()
 {
-   const omp_alloctrait_t trait[1] = {{1,1}};
+   const omp_alloctrait_t trait[1] = {{omp_atk_sync_hint, 1}};
    omp_allocator_handle_t my_alloc;
    #pragma omp target uses_allocators(traits(trait) : my_alloc)
      ;
diff --git a/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-9.c 
b/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-9.c
index 258dba10ebd..00f01fc7149 100644
--- a/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-9.c
+++ b/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-9.c
@@ -8,7 +8,7 @@ int main (void)
 
   #pragma omp target uses_allocators (traits (trait): my_alloc)
   {
-    int *x = omp_alloc (sizeof (int), my_alloc);
+    int *x = (int *) omp_alloc (sizeof (int), my_alloc);
     if ((uintptr_t) x % 128 != 0)
       __builtin_abort ();
     omp_free (x, my_alloc);
@@ -18,7 +18,7 @@ int main (void)
 
   #pragma omp target uses_allocators (traits (trait): my_alloc)
   {
-    int *x = omp_alloc (sizeof (int), my_alloc);
+    int *x = (int *) omp_alloc (sizeof (int), my_alloc);
     if ((uintptr_t) x % 128 != 0)
       __builtin_abort ();
     omp_free (x, my_alloc);
@@ -30,7 +30,7 @@ int main (void)
   /* The following creates an allocator with empty traits + default mem space. 
*/
   #pragma omp target uses_allocators (my_alloc)
   {
-    int *x = omp_aligned_alloc (128, sizeof (int), my_alloc);
+    int *x = (int *) omp_aligned_alloc (128, sizeof (int), my_alloc);
     if ((uintptr_t) x % 128 != 0)
       __builtin_abort ();
     omp_free (x, my_alloc);
diff --git a/libgomp/testsuite/libgomp.fortran/dep-uses-allocators.f90 
b/libgomp/testsuite/libgomp.fortran/dep-uses-allocators.f90
index ab81ffb910d..2c0b8af7337 100644
--- a/libgomp/testsuite/libgomp.fortran/dep-uses-allocators.f90
+++ b/libgomp/testsuite/libgomp.fortran/dep-uses-allocators.f90
@@ -9,6 +9,5 @@ program test
   type(omp_alloctrait), parameter :: trait(0) = [omp_alloctrait :: ]
 
   !$omp target uses_allocators(omp_default_mem_alloc, a1(trait))
-  ! { dg-message "sorry, unimplemented: 'uses_allocators' clause with traits 
and memory spaces" "" { target *-*-* } .-1 }
   block; end block
 end program
diff --git a/libgomp/testsuite/libgomp.fortran/uses_allocators-7.f90 
b/libgomp/testsuite/libgomp.fortran/uses_allocators-7.f90
index 64ac5ca189e..d0a603b5ced 100644
--- a/libgomp/testsuite/libgomp.fortran/uses_allocators-7.f90
+++ b/libgomp/testsuite/libgomp.fortran/uses_allocators-7.f90
@@ -55,4 +55,4 @@ end
 
 ! { dg-final { scan-tree-dump-times "#pragma omp target 
.*uses_allocators\\(memspace\\(\\), traits\\(trait\\) : my_alloc\\)" 1 "gimple" 
} }
 ! { dg-final { scan-tree-dump-times "#pragma omp target 
.*uses_allocators\\(memspace\\(\\), traits\\(\\) : my_alloc\\)" 1 "gimple" } }
-! { dg-final { scan-tree-dump-times "#pragma omp target 
.*uses_allocators\\(memspace\\(1\\), traits\\(\\) : my4\\) 
uses_allocators\\(memspace\\(\\), traits\\(t2\\) : my3\\) 
uses_allocators\\(memspace\\(\\), traits\\(\\) : my2\\) 
uses_allocators\\(memspace\\(3\\), traits\\(t\\) : my\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times "#pragma omp target 
.*uses_allocators\\(memspace\\(1\\), traits\\(\\) : my4\\) 
uses_allocators\\(memspace\\(\\), traits\\(t2\\) : my3\\) 
uses_allocators\\(memspace\\(\\), traits\\(\\) : my2\\) 
uses_allocators\\(memspace\\(3\\), traits\\(t\\) : my\\)" 1 "original" { xfail 
*-*-* }  } }
-- 
2.34.1

Reply via email to