summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerome Lambourg <lambourg@adacore.com>2019-12-20 09:30:48 +0000
committerJerome Lambourg <lambourg@gcc.gnu.org>2019-12-20 09:30:48 +0000
commit7607ff49afaa8fc1bdd506c4d68862f350a2f05f (patch)
treeaf17ece8ed22d252f36dec0a24b9ed18bb232f87
parent211c667faf4edff934894776ac0f8c81fe1b1708 (diff)
libstdc++: Strengthen the check for availability of pthread_rwlock_t
* acinclude.m4 (_GLIBCXX_USE_PTHREAD_RWLOCK_T): Checks that _PTHREADS is defined after including gthr.h. * configure: Regenerate. From-SVN: r279635
-rw-r--r--libstdc++-v3/ChangeLog6
-rw-r--r--libstdc++-v3/acinclude.m432
-rwxr-xr-xlibstdc++-v3/configure29
3 files changed, 56 insertions, 11 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 91d60d0bff4..126f3d386b5 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,9 @@
+2019-12-20 Jerome Lambourg <lambourg@adacore.com>
+
+ * acinclude.m4 (_GLIBCXX_USE_PTHREAD_RWLOCK_T): Checks that _PTHREADS
+ is defined after including gthr.h.
+ * configure: Regenerate.
+
2019-12-12 Jonathan Wakely <jwakely@redhat.com>
* libsupc++/compare (common_comparison_category): Define without using
diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4
index 016b0c583d0..8401696b5b5 100644
--- a/libstdc++-v3/acinclude.m4
+++ b/libstdc++-v3/acinclude.m4
@@ -1410,7 +1410,7 @@ AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME], [
[#include <features.h>],
[
#if ! __GLIBC_PREREQ(2, 17)
- #error
+ #error
#endif
],
[glibcxx_glibc217=yes], [glibcxx_glibc217=no])
@@ -2163,7 +2163,7 @@ AC_DEFUN([GLIBCXX_CHECK_STDIO_PROTO], [
AC_CACHE_VAL(glibcxx_cv_gets, [
AC_COMPILE_IFELSE([AC_LANG_SOURCE(
[#include <stdio.h>
- namespace test
+ namespace test
{
using ::gets;
}
@@ -2780,9 +2780,9 @@ AC_DEFUN([GLIBCXX_ENABLE_VTABLE_VERIFY], [
esac
VTV_PCH_CXXFLAGS="-fvtable-verify=std"
else
- VTV_CXXFLAGS=
+ VTV_CXXFLAGS=
VTV_PCH_CXXFLAGS=
- VTV_CXXLINKFLAGS=
+ VTV_CXXLINKFLAGS=
fi
AC_SUBST(VTV_CXXFLAGS)
@@ -3964,7 +3964,7 @@ dnl
AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [
GLIBCXX_ENABLE(libstdcxx-threads,auto,,[enable C++11 threads support])
- if test x$enable_libstdcxx_threads = xauto ||
+ if test x$enable_libstdcxx_threads = xauto ||
test x$enable_libstdcxx_threads = xyes; then
AC_LANG_SAVE
@@ -4017,11 +4017,23 @@ AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [
[Define if gthreads library is available.])
# Also check for pthread_rwlock_t for std::shared_timed_mutex in C++14
- AC_CHECK_TYPE([pthread_rwlock_t],
- [AC_DEFINE([_GLIBCXX_USE_PTHREAD_RWLOCK_T], 1,
- [Define if POSIX read/write locks are available in <gthr.h>.])],
- [],
- [#include "gthr.h"])
+ # but only do so if we're using pthread in the gthread library.
+ # On VxWorks for example, pthread_rwlock_t is defined in sys/types.h
+ # but the pthread library is not there by default and the gthread library
+ # does not use it.
+ AC_TRY_COMPILE([#include "gthr.h"],
+ [
+ #if (!defined(_PTHREADS))
+ #error
+ #endif
+ ], [ac_gthread_use_pthreads=yes], [ac_gthread_use_pthreads=no])
+ if test x"$ac_gthread_use_pthreads" = x"yes"; then
+ AC_CHECK_TYPE([pthread_rwlock_t],
+ [AC_DEFINE([_GLIBCXX_USE_PTHREAD_RWLOCK_T], 1,
+ [Define if POSIX read/write locks are available in <gthr.h>.])],
+ [],
+ [#include "gthr.h"])
+ fi
fi
CXXFLAGS="$ac_save_CXXFLAGS"
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index b7242157107..3c51166fe9f 100755
--- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure
@@ -74654,7 +74654,33 @@ $as_echo "#define _GLIBCXX_HAS_GTHREADS 1" >>confdefs.h
# Also check for pthread_rwlock_t for std::shared_timed_mutex in C++14
- ac_fn_cxx_check_type "$LINENO" "pthread_rwlock_t" "ac_cv_type_pthread_rwlock_t" "#include \"gthr.h\"
+ # but only do so if we're using pthread in the gthread library.
+ # On VxWorks for example, pthread_rwlock_t is defined in sys/types.h
+ # but the pthread library is not there by default and the gthread library
+ # does not use it.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include "gthr.h"
+int
+main ()
+{
+
+ #if (!defined(_PTHREADS))
+ #error
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_gthread_use_pthreads=yes
+else
+ ac_gthread_use_pthreads=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test x"$ac_gthread_use_pthreads" = x"yes"; then
+ ac_fn_cxx_check_type "$LINENO" "pthread_rwlock_t" "ac_cv_type_pthread_rwlock_t" "#include \"gthr.h\"
"
if test "x$ac_cv_type_pthread_rwlock_t" = xyes; then :
@@ -74662,6 +74688,7 @@ $as_echo "#define _GLIBCXX_USE_PTHREAD_RWLOCK_T 1" >>confdefs.h
fi
+ fi
fi
CXXFLAGS="$ac_save_CXXFLAGS"