re PR libstdc++/49745 (error: ‘int truncate’ redeclared as different kind of symbol)

/gcc
2011-07-15  Paolo Carlini  <paolo.carlini@oracle.com>
	    Jakub Jelinek  <jakub@redhat.com>
	    Jonathan Wakely  <jwakely.gcc@gmail.com>

	PR libstdc++/49745
	* gthr-posix.h: Do not include <unistd.h> unconditionally; use
	_GTHREADS_USE_MUTEX_TIMEDLOCK instead of _POSIX_TIMEOUTS.

/libstdc++-v3
2011-07-15  Paolo Carlini  <paolo.carlini@oracle.com>
	    Jakub Jelinek  <jakub@redhat.com>

	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 <unistd.h>.
	* testsuite/17_intro/headers/c++1998/49745.cc: New.
	* configure: Regenerate.
	* config.h.in: Likewise.

Co-Authored-By: Jakub Jelinek <jakub@redhat.com>
Co-Authored-By: Jonathan Wakely <jwakely.gcc@gmail.com>

From-SVN: r176335
This commit is contained in:
Paolo Carlini 2011-07-15 21:52:06 +00:00 committed by Paolo Carlini
parent d0a9fbe16c
commit 6545e33e69
8 changed files with 120 additions and 16 deletions

View File

@ -1,3 +1,11 @@
2011-07-15 Paolo Carlini <paolo.carlini@oracle.com>
Jakub Jelinek <jakub@redhat.com>
Jonathan Wakely <jwakely.gcc@gmail.com>
PR libstdc++/49745
* gthr-posix.h: Do not include <unistd.h> unconditionally; use
_GTHREADS_USE_MUTEX_TIMEDLOCK instead of _POSIX_TIMEOUTS.
2011-07-15 Jason Merrill <jason@redhat.com>
PR testsuite/49741

View File

@ -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 <pthread.h>
#include <unistd.h>
#if ((defined(_LIBOBJC) || defined(_LIBOBJC_WEAK)) \
|| !defined(_GTHREAD_USE_MUTEX_TIMEDLOCK))
# include <unistd.h>
# 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)

View File

@ -1,3 +1,14 @@
2011-07-15 Paolo Carlini <paolo.carlini@oracle.com>
Jakub Jelinek <jakub@redhat.com>
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 <unistd.h>.
* testsuite/17_intro/headers/c++1998/49745.cc: New.
* configure: Regenerate.
* config.h.in: Likewise.
2011-07-11 Paolo Carlini <paolo.carlini@oracle.com>
PR libstdc++/49559

View File

@ -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 <unistd.h>],
[
#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 <unistd.h>
],
[
#ifndef __GTHREADS_CXX0X
#error

View File

@ -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

View File

@ -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 <unistd.h>
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 <unistd.h>
int
main ()
{

View File

@ -35,6 +35,7 @@
&& defined(_GLIBCXX_ATOMIC_BUILTINS_4) && defined(_GLIBCXX_HAVE_LINUX_FUTEX)
# include <climits>
# include <syscall.h>
# include <unistd.h>
# define _GLIBCXX_USE_FUTEX
# define _GLIBCXX_FUTEX_WAIT 0
# define _GLIBCXX_FUTEX_WAKE 1

View File

@ -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
// <http://www.gnu.org/licenses/>.
// libstdc++/49745
#include <iostream>
int truncate = 0;