re PR fortran/47571 (undefined reference to clock_gettime in Linux build of 02/01...
authorFrancois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Mon, 31 Aug 2015 10:37:30 +0000 (10:37 +0000)
committerFrançois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Mon, 31 Aug 2015 10:37:30 +0000 (10:37 +0000)
PR libfortran/47571
* acinclude.m4 (LIBGFOR_GTHREAD_WEAK): Remove.
(LIBGFOR_CHECK_WEAKREF): New test.
* configure.ac: Call LIBGFOR_CHECK_WEAKREF instead of
LIBGFOR_GTHREAD_WEAK.
* config.h.in: Regenerate.
* configure: Regenerate.
* intrinsics/system_clock.c: Use SUPPORTS_WEAKREF instead of
SUPPORTS_WEAK and GTHREAD_USE_WEAK.

From-SVN: r227335

libgfortran/ChangeLog
libgfortran/acinclude.m4
libgfortran/config.h.in
libgfortran/configure
libgfortran/configure.ac
libgfortran/intrinsics/system_clock.c

index d08f050eb31b434913c18681f1852ec321f3e884..a6301f1d67d9e7c6758aea42442922a470254a79 100644 (file)
@@ -1,3 +1,15 @@
+2015-08-31  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+
+       PR libfortran/47571
+       * acinclude.m4 (LIBGFOR_GTHREAD_WEAK): Remove.
+       (LIBGFOR_CHECK_WEAKREF): New test.
+       * configure.ac: Call LIBGFOR_CHECK_WEAKREF instead of
+       LIBGFOR_GTHREAD_WEAK.
+       * config.h.in: Regenerate.
+       * configure: Regenerate.
+       * intrinsics/system_clock.c: Use SUPPORTS_WEAKREF instead of
+       SUPPORTS_WEAK and GTHREAD_USE_WEAK.
+
 2015-08-29 Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR libgfortran/67367
index a0975a92a36abe5de721428554ae7657e426a37c..fab29e424bf2729a3bef134977604cb9100c7bcf 100644 (file)
@@ -69,27 +69,21 @@ if (foovar > 10) return __sync_add_and_fetch (&foovar, -1);]])],
              [Define to 1 if the target supports __sync_fetch_and_add])
   fi])
 
-dnl Check for pragma weak.
-AC_DEFUN([LIBGFOR_GTHREAD_WEAK], [
-  AC_CACHE_CHECK([whether pragma weak works],
-                libgfor_cv_have_pragma_weak, [
-  gfor_save_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -Wunknown-pragmas"
-  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-void foo (void);
-#pragma weak foo
-]], [[if (foo) foo ();]])],
-                   libgfor_cv_have_pragma_weak=yes, libgfor_cv_have_pragma_weak=no)])
-  if test $libgfor_cv_have_pragma_weak = yes; then
-    AC_DEFINE(SUPPORTS_WEAK, 1,
-             [Define to 1 if the target supports #pragma weak])
-  fi
-  case "$host" in
-    *-*-darwin* | *-*-hpux* | *-*-cygwin* | *-*-mingw* | *-*-musl* )
-      AC_DEFINE(GTHREAD_USE_WEAK, 0,
-               [Define to 0 if the target shouldn't use #pragma weak])
-      ;;
-  esac])
+dnl Check whether target effectively supports weakref
+AC_DEFUN([LIBGFOR_CHECK_WEAKREF], [
+  AC_CACHE_CHECK([whether the target supports weakref],
+                libgfor_cv_have_weakref, [
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -Wunknown-pragmas -Werror"
+  AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+static int mytoto (int) __attribute__((__weakref__("toto")));
+]], [[return (mytoto != 0);]])],
+                libgfor_cv_have_weakref=yes, libgfor_cv_have_weakref=no)
+  CFLAGS="$save_CFLAGS"])
+  if test $libgfor_cv_have_weakref = yes; then
+    AC_DEFINE(SUPPORTS_WEAKREF, 1,
+             [Define to 1 if the target supports weakref])
+  fi])
 
 dnl Check whether target can unlink a file still open.
 AC_DEFUN([LIBGFOR_CHECK_UNLINK_OPEN_FILE], [
index 70a34b113a1bd89ca9501fe0463bdba64586e362..cf8237e0f0cf67cdb474213c48afd06b5fb8d08c 100644 (file)
@@ -1,8 +1,5 @@
 /* config.h.in.  Generated from configure.ac by autoheader.  */
 
-/* Define to 0 if the target shouldn't use #pragma weak */
-#undef GTHREAD_USE_WEAK
-
 /* Define to 1 if you have the `access' function. */
 #undef HAVE_ACCESS
 
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
 
-/* Define to 1 if the target supports #pragma weak */
-#undef SUPPORTS_WEAK
+/* Define to 1 if the target supports weakref */
+#undef SUPPORTS_WEAKREF
 
 /* Enable extensions on AIX 3, Interix.  */
 #ifndef _ALL_SOURCE
index 546a5a9b55ee5d575055864ee5590f198b8e8146..12f6f131e61da44063fac2af521ff497d16cc6eb 100755 (executable)
@@ -25953,51 +25953,48 @@ $as_echo "#define HAVE_SYNC_FETCH_AND_ADD 1" >>confdefs.h
 
   fi
 
-# Check out #pragma weak.
+# Check out weakref support.
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pragma weak works" >&5
-$as_echo_n "checking whether pragma weak works... " >&6; }
-if test "${libgfor_cv_have_pragma_weak+set}" = set; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the target supports weakref" >&5
+$as_echo_n "checking whether the target supports weakref... " >&6; }
+if test "${libgfor_cv_have_weakref+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
 
-  gfor_save_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -Wunknown-pragmas"
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -Wunknown-pragmas -Werror"
+  if test x$gcc_no_link = xyes; then
+  as_fn_error "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-void foo (void);
-#pragma weak foo
+static int mytoto (int) __attribute__((__weakref__("toto")));
 
 int
 main ()
 {
-if (foo) foo ();
+return (mytoto != 0);
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  libgfor_cv_have_pragma_weak=yes
+if ac_fn_c_try_link "$LINENO"; then :
+  libgfor_cv_have_weakref=yes
 else
-  libgfor_cv_have_pragma_weak=no
+  libgfor_cv_have_weakref=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CFLAGS="$save_CFLAGS"
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libgfor_cv_have_pragma_weak" >&5
-$as_echo "$libgfor_cv_have_pragma_weak" >&6; }
-  if test $libgfor_cv_have_pragma_weak = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libgfor_cv_have_weakref" >&5
+$as_echo "$libgfor_cv_have_weakref" >&6; }
+  if test $libgfor_cv_have_weakref = yes; then
 
-$as_echo "#define SUPPORTS_WEAK 1" >>confdefs.h
+$as_echo "#define SUPPORTS_WEAKREF 1" >>confdefs.h
 
   fi
-  case "$host" in
-    *-*-darwin* | *-*-hpux* | *-*-cygwin* | *-*-mingw* | *-*-musl* )
-
-$as_echo "#define GTHREAD_USE_WEAK 0" >>confdefs.h
-
-      ;;
-  esac
 
 # Various other checks on target
 
index 97b91529ebcd74b179f1eaa07d76e315111d3102..fd963ff11b8a626bebd299ffd72d371b2b101f89 100644 (file)
@@ -595,8 +595,8 @@ LIBGFOR_CHECK_ATTRIBUTE_ALIAS
 # Check out sync builtins support.
 LIBGFOR_CHECK_SYNC_FETCH_AND_ADD
 
-# Check out #pragma weak.
-LIBGFOR_GTHREAD_WEAK
+# Check out weakref support.
+LIBGFOR_CHECK_WEAKREF
 
 # Various other checks on target
 LIBGFOR_CHECK_UNLINK_OPEN_FILE
index ba0bdfe68cbf65b8b1e2d6569ee116ad645cac2a..e36650061ab6c34d3578dfec4033e88a70866880 100644 (file)
@@ -45,16 +45,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 /* Weakref trickery for clock_gettime().  On Glibc <= 2.16,
    clock_gettime() requires us to link in librt, which also pulls in
    libpthread.  In order to avoid this by default, only call
-   clock_gettime() through a weak reference.
-
-   Some targets don't support weak undefined references; on these
-   GTHREAD_USE_WEAK is 0. So we need to define it to 1 on other
-   targets.  */
-#ifndef GTHREAD_USE_WEAK
-#define GTHREAD_USE_WEAK 1
-#endif
-
-#if SUPPORTS_WEAK && GTHREAD_USE_WEAK && defined(HAVE_CLOCK_GETTIME_LIBRT)
+   clock_gettime() through a weak reference.  */
+#if SUPPORTS_WEAKREF && defined(HAVE_CLOCK_GETTIME_LIBRT)
 static int weak_gettime (clockid_t, struct timespec *) 
   __attribute__((__weakref__("clock_gettime")));
 #endif
@@ -90,7 +82,7 @@ gf_gettime_mono (time_t * secs, long * fracsecs, long * tck)
   *fracsecs = ts.tv_nsec;
   return err;
 #else
-#if defined(HAVE_CLOCK_GETTIME_LIBRT) && SUPPORTS_WEAK && GTHREAD_USE_WEAK
+#if SUPPORTS_WEAKREF && defined(HAVE_CLOCK_GETTIME_LIBRT)
   if (weak_gettime)
     {
       struct timespec ts;