Hi, this patch fixes the uninitialized acc_device_lock mutex situation reported in PR 67141. The patch attached on the bugzilla page tries to solve it by constructor priorities, which we think will probably be less manageable in general.
This patch changes goacc_host_init() to be called from goacc_runtime_initialize() instead, thereby ensuring the init order. libgomp testsuite was re-run without regressions, okay for trunk? Thanks, Chung-Lin 2015-09-18 Chung-Lin Tang <clt...@codesourcery.com> PR libgomp/67141 * oacc-int.h (goacc_host_init): Add declaration. * oacc-host.c (goacc_host_init): Remove static and constructor attribute * oacc-init.c (goacc_runtime_initialize): Call goacc_host_init() at end.
Index: oacc-host.c =================================================================== --- oacc-host.c (revision 227895) +++ oacc-host.c (working copy) @@ -256,7 +256,7 @@ static struct gomp_device_descr host_dispatch = }; /* Initialize and register this device type. */ -static __attribute__ ((constructor)) void +void goacc_host_init (void) { gomp_mutex_init (&host_dispatch.lock); Index: oacc-int.h =================================================================== --- oacc-int.h (revision 227895) +++ oacc-int.h (working copy) @@ -97,6 +97,7 @@ void goacc_runtime_initialize (void); void goacc_save_and_set_bind (acc_device_t); void goacc_restore_bind (void); void goacc_lazy_initialize (void); +void goacc_host_init (void); #ifdef HAVE_ATTRIBUTE_VISIBILITY # pragma GCC visibility pop Index: oacc-init.c =================================================================== --- oacc-init.c (revision 227895) +++ oacc-init.c (working copy) @@ -644,6 +644,9 @@ goacc_runtime_initialize (void) goacc_threads = NULL; gomp_mutex_init (&goacc_thread_lock); + + /* Initialize and register the 'host' device type. */ + goacc_host_init (); } /* Compiler helper functions */