This test case, simplified from libgfortran, currently results in a tail call to pthread_mutex_unlock on i686 with -fpic, and is the cause of all the libgomp fortran failures on the branch. That this isn't seen on mainline is simply a consequence of not using any threadded fortran code on mainline.
That targetm.binds_local_p is no longer reliable is a serious bug. And unless GeoffK can be convinced that the current setting of TREE_PUBLIC is in fact ON, then we'll have to audit every single use of that symbol, and determine if it actually should be testing targetm.binds_local_p, or some new predicate yet to be determined. r~ typedef struct pthread_mutex_tag pthread_mutex_t; extern int pthread_mutex_unlock (pthread_mutex_t *__mutex) __attribute__ ((__nothrow__)); static __typeof(pthread_mutex_unlock) __gthrw_pthread_mutex_unlock __attribute__ ((__weakref__("pthread_mutex_unlock"))); void foo(pthread_mutex_t *m) { __gthrw_pthread_mutex_unlock (m); }