From 6545e33e69832eb0e5f946787f1764cf0179a049 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Fri, 15 Jul 2011 21:52:06 +0000 Subject: [PATCH] =?utf8?q?re=20PR=20libstdc++/49745=20(error:=20=E2=80=98i?= =?utf8?q?nt=20truncate=E2=80=99=20redeclared=20as=20different=20kind=20of?= =?utf8?q?=20symbol)?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit /gcc 2011-07-15 Paolo Carlini Jakub Jelinek Jonathan Wakely PR libstdc++/49745 * gthr-posix.h: Do not include unconditionally; use _GTHREADS_USE_MUTEX_TIMEDLOCK instead of _POSIX_TIMEOUTS. /libstdc++-v3 2011-07-15 Paolo Carlini Jakub Jelinek PR libstdc++/49745 * acinclude.m4 ([GLIBCXX_CHECK_GTHREADS]): Check separately for _POSIX_TIMEOUTS and define _GTHREADS_USE_MUTEX_TIMEDLOCK. * libstdc++-v3/libsupc++/guard.cc: Include . * testsuite/17_intro/headers/c++1998/49745.cc: New. * configure: Regenerate. * config.h.in: Likewise. Co-Authored-By: Jakub Jelinek Co-Authored-By: Jonathan Wakely From-SVN: r176335 --- gcc/ChangeLog | 8 ++++ gcc/gthr-posix.h | 29 ++++++------- libstdc++-v3/ChangeLog | 11 +++++ libstdc++-v3/acinclude.m4 | 21 +++++++++- libstdc++-v3/config.h.in | 3 ++ libstdc++-v3/configure | 41 ++++++++++++++++++- libstdc++-v3/libsupc++/guard.cc | 1 + .../17_intro/headers/c++1998/49745.cc | 22 ++++++++++ 8 files changed, 120 insertions(+), 16 deletions(-) create mode 100644 libstdc++-v3/testsuite/17_intro/headers/c++1998/49745.cc diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7d52dd3ecbb..1efbe5b0944 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2011-07-15 Paolo Carlini + Jakub Jelinek + Jonathan Wakely + + PR libstdc++/49745 + * gthr-posix.h: Do not include unconditionally; use + _GTHREADS_USE_MUTEX_TIMEDLOCK instead of _POSIX_TIMEOUTS. + 2011-07-15 Jason Merrill PR testsuite/49741 diff --git a/gcc/gthr-posix.h b/gcc/gthr-posix.h index ecb06e2f4cb..b1d499dcc3d 100644 --- a/gcc/gthr-posix.h +++ b/gcc/gthr-posix.h @@ -1,7 +1,7 @@ /* Threads compatibility routines for libgcc2 and libobjc. */ /* Compile this one with gcc. */ /* Copyright (C) 1997, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, - 2008, 2009, 2010 Free Software Foundation, Inc. + 2008, 2009, 2010, 2011 Free Software Foundation, Inc. This file is part of GCC. @@ -39,7 +39,16 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #endif #include -#include + +#if ((defined(_LIBOBJC) || defined(_LIBOBJC_WEAK)) \ + || !defined(_GTHREAD_USE_MUTEX_TIMEDLOCK)) +# include +# if defined(_POSIX_TIMEOUTS) && _POSIX_TIMEOUTS >= 0 +# define _GTHREAD_USE_MUTEX_TIMEDLOCK 1 +# else +# define _GTHREAD_USE_MUTEX_TIMEDLOCK 0 +# endif +#endif typedef pthread_t __gthread_t; typedef pthread_key_t __gthread_key_t; @@ -100,11 +109,9 @@ __gthrw3(sched_yield) __gthrw3(pthread_mutex_lock) __gthrw3(pthread_mutex_trylock) -#ifdef _POSIX_TIMEOUTS -#if _POSIX_TIMEOUTS >= 0 +#if _GTHREAD_USE_MUTEX_TIMEDLOCK __gthrw3(pthread_mutex_timedlock) #endif -#endif /* _POSIX_TIMEOUTS */ __gthrw3(pthread_mutex_unlock) __gthrw3(pthread_mutex_init) __gthrw3(pthread_mutex_destroy) @@ -131,11 +138,9 @@ __gthrw(sched_yield) __gthrw(pthread_mutex_lock) __gthrw(pthread_mutex_trylock) -#ifdef _POSIX_TIMEOUTS -#if _POSIX_TIMEOUTS >= 0 +#if _GTHREAD_USE_MUTEX_TIMEDLOCK __gthrw(pthread_mutex_timedlock) #endif -#endif /* _POSIX_TIMEOUTS */ __gthrw(pthread_mutex_unlock) __gthrw(pthread_mutex_init) __gthrw(pthread_mutex_destroy) @@ -753,8 +758,7 @@ __gthread_mutex_trylock (__gthread_mutex_t *__mutex) return 0; } -#ifdef _POSIX_TIMEOUTS -#if _POSIX_TIMEOUTS >= 0 +#if _GTHREAD_USE_MUTEX_TIMEDLOCK static inline int __gthread_mutex_timedlock (__gthread_mutex_t *__mutex, const __gthread_time_t *__abs_timeout) @@ -765,7 +769,6 @@ __gthread_mutex_timedlock (__gthread_mutex_t *__mutex, return 0; } #endif -#endif static inline int __gthread_mutex_unlock (__gthread_mutex_t *__mutex) @@ -811,8 +814,7 @@ __gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex) return __gthread_mutex_trylock (__mutex); } -#ifdef _POSIX_TIMEOUTS -#if _POSIX_TIMEOUTS >= 0 +#if _GTHREAD_USE_MUTEX_TIMEDLOCK static inline int __gthread_recursive_mutex_timedlock (__gthread_recursive_mutex_t *__mutex, const __gthread_time_t *__abs_timeout) @@ -820,7 +822,6 @@ __gthread_recursive_mutex_timedlock (__gthread_recursive_mutex_t *__mutex, return __gthread_mutex_timedlock (__mutex, __abs_timeout); } #endif -#endif static inline int __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index e628417e350..8b429060e4f 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,14 @@ +2011-07-15 Paolo Carlini + Jakub Jelinek + + PR libstdc++/49745 + * acinclude.m4 ([GLIBCXX_CHECK_GTHREADS]): Check separately for + _POSIX_TIMEOUTS and define _GTHREADS_USE_MUTEX_TIMEDLOCK. + * libstdc++-v3/libsupc++/guard.cc: Include . + * testsuite/17_intro/headers/c++1998/49745.cc: New. + * configure: Regenerate. + * config.h.in: Likewise. + 2011-07-11 Paolo Carlini PR libstdc++/49559 diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4 index 8ebb3b5e593..349473cb814 100644 --- a/libstdc++-v3/acinclude.m4 +++ b/libstdc++-v3/acinclude.m4 @@ -3155,6 +3155,22 @@ AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [ ac_save_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS -fno-exceptions -I${toplevel_srcdir}/gcc" + AC_MSG_CHECKING([check whether it can be safely assumed that mutex_timedlock is available]) + + AC_TRY_COMPILE([#include ], + [ + #if !defined(_POSIX_TIMEOUTS) || _POSIX_TIMEOUTS < 0 + #error + #endif + ], [ac_gthread_use_mutex_timedlock=1], [ac_gthread_use_mutex_timedlock=0]) + + AC_DEFINE_UNQUOTED(_GTHREAD_USE_MUTEX_TIMEDLOCK, $ac_gthread_use_mutex_timedlock, + [Define to 1 if mutex_timedlock is available.]) + + if test $ac_gthread_use_mutex_timedlock = 1 ; then res_mutex_timedlock=yes ; + else res_mutex_timedlock=no ; fi + AC_MSG_RESULT([$res_mutex_timedlock]) + target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'` case $target_thread_file in posix) @@ -3163,7 +3179,10 @@ AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [ AC_MSG_CHECKING([for gthreads library]) - AC_TRY_COMPILE([#include "gthr.h"], + AC_TRY_COMPILE([ + #include "gthr.h" + #include + ], [ #ifndef __GTHREADS_CXX0X #error diff --git a/libstdc++-v3/config.h.in b/libstdc++-v3/config.h.in index 6137ba02827..bf0ee3406da 100644 --- a/libstdc++-v3/config.h.in +++ b/libstdc++-v3/config.h.in @@ -823,6 +823,9 @@ /* Define if code specialized for wchar_t should be used. */ #undef _GLIBCXX_USE_WCHAR_T +/* Define to 1 if mutex_timedlock is available. */ +#undef _GTHREAD_USE_MUTEX_TIMEDLOCK + #if defined (HAVE__ACOSF) && ! defined (HAVE_ACOSF) # define HAVE_ACOSF 1 # define acosf _acosf diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure index d3f9527c0e3..ae74e1239fd 100755 --- a/libstdc++-v3/configure +++ b/libstdc++-v3/configure @@ -19427,6 +19427,42 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_save_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS -fno-exceptions -I${toplevel_srcdir}/gcc" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking check whether it can be safely assumed that mutex_timedlock is available" >&5 +$as_echo_n "checking check whether it can be safely assumed that mutex_timedlock is available... " >&6; } + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ + + #if !defined(_POSIX_TIMEOUTS) || _POSIX_TIMEOUTS < 0 + #error + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_gthread_use_mutex_timedlock=1 +else + ac_gthread_use_mutex_timedlock=0 +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + +cat >>confdefs.h <<_ACEOF +#define _GTHREAD_USE_MUTEX_TIMEDLOCK $ac_gthread_use_mutex_timedlock +_ACEOF + + + if test $ac_gthread_use_mutex_timedlock = 1 ; then res_mutex_timedlock=yes ; + else res_mutex_timedlock=no ; fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $res_mutex_timedlock" >&5 +$as_echo "$res_mutex_timedlock" >&6; } + target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'` case $target_thread_file in posix) @@ -19438,7 +19474,10 @@ $as_echo_n "checking for gthreads library... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include "gthr.h" + + #include "gthr.h" + #include + int main () { diff --git a/libstdc++-v3/libsupc++/guard.cc b/libstdc++-v3/libsupc++/guard.cc index 7514fa4c5c1..21bca584c1d 100644 --- a/libstdc++-v3/libsupc++/guard.cc +++ b/libstdc++-v3/libsupc++/guard.cc @@ -35,6 +35,7 @@ && defined(_GLIBCXX_ATOMIC_BUILTINS_4) && defined(_GLIBCXX_HAVE_LINUX_FUTEX) # include # include +# include # define _GLIBCXX_USE_FUTEX # define _GLIBCXX_FUTEX_WAIT 0 # define _GLIBCXX_FUTEX_WAKE 1 diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++1998/49745.cc b/libstdc++-v3/testsuite/17_intro/headers/c++1998/49745.cc new file mode 100644 index 00000000000..070666848ba --- /dev/null +++ b/libstdc++-v3/testsuite/17_intro/headers/c++1998/49745.cc @@ -0,0 +1,22 @@ +// { dg-do compile { target *-*-linux* } } + +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// libstdc++/49745 +#include +int truncate = 0; -- 2.30.2