From 69eb61d47a9c6dae5308134ee809d85882fbeb10 Mon Sep 17 00:00:00 2001
From: Tobias Burnus <burnus@net-b.de>
Date: Tue, 15 Feb 2011 22:30:43 +0100
Subject: [PATCH] re PR libfortran/47716 (libgfortran quadmath_weak.h not found
 on NetBSD 5.1)

2011-02-15  Tobias Burnus  <burnus@net-b.de>

        PR fortran/47716
        PR fortran/47648
        * acinclude.m4 (LIBGFOR_CHECK_FLOAT128): Use check from
        libquadmath, which uses more features.
        * configure: Regenerate.

From-SVN: r170200
---
 libgfortran/ChangeLog    |  8 ++++
 libgfortran/acinclude.m4 | 45 ++++++++++++--------
 libgfortran/configure    | 89 ++++++++++++++++++++++++++++++++--------
 3 files changed, 108 insertions(+), 34 deletions(-)

diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 71a6329562c9..18daa42d3997 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,11 @@
+2011-02-15  Tobias Burnus  <burnus@net-b.de>
+
+	PR fortran/47716
+	PR fortran/47648
+	* acinclude.m4 (LIBGFOR_CHECK_FLOAT128): Use check from
+	libquadmath, which uses more features.
+	* configure: Regenerate.
+
 2011-02-14  Jakub Jelinek  <jakub@redhat.com>
 
 	PR fortran/47642
diff --git a/libgfortran/acinclude.m4 b/libgfortran/acinclude.m4
index 9873d9f23924..1bc1c7bbbfd0 100644
--- a/libgfortran/acinclude.m4
+++ b/libgfortran/acinclude.m4
@@ -284,24 +284,33 @@ AC_DEFUN([LIBGFOR_CHECK_FLOAT128], [
 
   AC_CACHE_CHECK([whether we have a usable __float128 type],
                  libgfor_cv_have_float128, [
-    AC_TRY_LINK([
-/* no header */
-],[
-  typedef _Complex float __attribute__((mode(TC))) __complex128;
-
-  __float128 x;
-  x = __builtin_huge_valq() - 2.e1000Q;
-
-  __complex128 z1, z2;
-  z1 = x;
-  z2 = 2.Q;
-
-  z1 /= z2;
-  z1 /= 7.Q;
-],
-    libgfor_cv_have_float128=yes,
-    libgfor_cv_have_float128=no)
-  ])
+   GCC_TRY_COMPILE_OR_LINK([
+    typedef _Complex float __attribute__((mode(TC))) __complex128;
+
+    __float128 foo (__float128 x)
+    {
+
+     __complex128 z1, z2;
+
+     z1 = x;
+     z2 = x / 7.Q;
+     z2 /= z1;
+
+     return (__float128) z2;
+    }
+
+    __float128 bar (__float128 x)
+    {
+      return x * __builtin_huge_valq ();
+    }
+  ],[
+    foo (1.2Q);
+    bar (1.2Q);
+  ],[
+    libgfor_cv_have_float128=yes
+  ],[
+    libgfor_cv_have_float128=no
+])])
 
   if test "x$libgfor_cv_have_float128" = xyes; then
     AC_DEFINE(HAVE_FLOAT128, 1, [Define if have a usable __float128 type.])
diff --git a/libgfortran/configure b/libgfortran/configure
index 42f72b5019bf..9d3c891ca80f 100755
--- a/libgfortran/configure
+++ b/libgfortran/configure
@@ -25075,42 +25075,99 @@ if test "${libgfor_cv_have_float128+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
 
-    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
+   if test x$gcc_no_link = xyes; then
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-/* no header */
+    typedef _Complex float __attribute__((mode(TC))) __complex128;
+
+    __float128 foo (__float128 x)
+    {
+
+     __complex128 z1, z2;
+
+     z1 = x;
+     z2 = x / 7.Q;
+     z2 /= z1;
+
+     return (__float128) z2;
+    }
+
+    __float128 bar (__float128 x)
+    {
+      return x * __builtin_huge_valq ();
+    }
 
 int
 main ()
 {
 
-  typedef _Complex float __attribute__((mode(TC))) __complex128;
+    foo (1.2Q);
+    bar (1.2Q);
 
-  __float128 x;
-  x = __builtin_huge_valq() - 2.e1000Q;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
 
-  __complex128 z1, z2;
-  z1 = x;
-  z2 = 2.Q;
+    libgfor_cv_have_float128=yes
 
-  z1 /= z2;
-  z1 /= 7.Q;
+else
+
+    libgfor_cv_have_float128=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  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.  */
+
+    typedef _Complex float __attribute__((mode(TC))) __complex128;
+
+    __float128 foo (__float128 x)
+    {
+
+     __complex128 z1, z2;
+
+     z1 = x;
+     z2 = x / 7.Q;
+     z2 /= z1;
+
+     return (__float128) z2;
+    }
+
+    __float128 bar (__float128 x)
+    {
+      return x * __builtin_huge_valq ();
+    }
+
+int
+main ()
+{
+
+    foo (1.2Q);
+    bar (1.2Q);
 
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  libgfor_cv_have_float128=yes
+
+    libgfor_cv_have_float128=yes
+
 else
-  libgfor_cv_have_float128=no
+
+    libgfor_cv_have_float128=no
+
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-
+fi
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libgfor_cv_have_float128" >&5
 $as_echo "$libgfor_cv_have_float128" >&6; }
-- 
GitLab