From patchwork Fri Jul 15 12:47:54 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Carlini X-Patchwork-Id: 104816 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id B1BF6B6F62 for ; Fri, 15 Jul 2011 22:48:29 +1000 (EST) Received: (qmail 32185 invoked by alias); 15 Jul 2011 12:48:25 -0000 Received: (qmail 32166 invoked by uid 22791); 15 Jul 2011 12:48:23 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL, BAYES_00, RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from rcsinet15.oracle.com (HELO rcsinet15.oracle.com) (148.87.113.117) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 15 Jul 2011 12:47:48 +0000 Received: from acsinet22.oracle.com (acsinet22.oracle.com [141.146.126.238]) by rcsinet15.oracle.com (Switch-3.4.4/Switch-3.4.4) with ESMTP id p6FCliPZ016467 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 15 Jul 2011 12:47:46 GMT Received: from acsmt358.oracle.com (acsmt358.oracle.com [141.146.40.158]) by acsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id p6FClhGx012079 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 15 Jul 2011 12:47:44 GMT Received: from abhmt119.oracle.com (abhmt119.oracle.com [141.146.116.71]) by acsmt358.oracle.com (8.12.11.20060308/8.12.11) with ESMTP id p6FClb5F021393; Fri, 15 Jul 2011 07:47:38 -0500 Received: from [192.168.1.4] (/79.51.11.127) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Fri, 15 Jul 2011 05:47:37 -0700 Message-ID: <4E2036FA.8020901@oracle.com> Date: Fri, 15 Jul 2011 14:47:54 +0200 From: Paolo Carlini User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:5.0) Gecko/20110624 Thunderbird/5.0 MIME-Version: 1.0 To: "gcc-patches@gcc.gnu.org" CC: libstdc++ , Jakub Jelinek , Jason Merrill , Ian Lance Taylor Subject: [v3] libstdc++/49745 (review required for the gthr-posix.h changes) X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Hi, this is what I did in terms of implementing Jon's and Jakub's suggestions: many thanks to both of you! The patch should be in general quite conservative and safe, in particular, the gthr-posix.h changes, which I cannot approve myself, touch bits only used by libstdc++-v3 + the macro avoiding the unconditional inclusion of , which, according to Jakub's analysis, should be required only by objc. I built and tested c++ and its lib and built all languages. Ok? Thanks, Paolo. /////////////////////// /gcc 2011-07-15 Paolo Carlini Jakub Jelinek Jonathan Wakely PR libstdc++/49745 * gthr-posix.h: Do not include unconditionally; use _GTHREADS_ASSUME_POSIX_TIMEOUTS 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_ASSUME_POSIX_TIMEOUTS. * libstdc++-v3/libsupc++/guard.cc: Include . * testsuite/17_intro/headers/c++1998/49745.cc: New. * configure: Regenerate. * config.h.in: Likewise. Index: libstdc++-v3/libsupc++/guard.cc =================================================================== --- libstdc++-v3/libsupc++/guard.cc (revision 176310) +++ libstdc++-v3/libsupc++/guard.cc (working copy) @@ -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 Index: libstdc++-v3/testsuite/17_intro/headers/c++1998/49745.cc =================================================================== --- libstdc++-v3/testsuite/17_intro/headers/c++1998/49745.cc (revision 0) +++ libstdc++-v3/testsuite/17_intro/headers/c++1998/49745.cc (revision 0) @@ -0,0 +1,22 @@ +// { dg-do compile } + +// 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; Index: libstdc++-v3/acinclude.m4 =================================================================== --- libstdc++-v3/acinclude.m4 (revision 176310) +++ libstdc++-v3/acinclude.m4 (working copy) @@ -3155,6 +3155,22 @@ ac_save_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS -fno-exceptions -I${toplevel_srcdir}/gcc" + AC_MSG_CHECKING([for _POSIX_TIMEOUTS >= 0 in ]) + + AC_TRY_COMPILE([#include ], + [ + #if !defined(_POSIX_TIMEOUTS) || _POSIX_TIMEOUTS < 0 + #error + #endif + ], [ac_assume_posix_timeouts=yes], [ac_assume_posix_timeouts=no]) + + AC_MSG_RESULT([$ac_assume_posix_timeouts]) + + if test x"$ac_assume_posix_timeouts" = x"yes"; then + AC_DEFINE(_GTHREADS_ASSUME_POSIX_TIMEOUTS, 1, + [Define if _POSIX_TIMEOUT is defined >= 0 by .]) + fi + target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'` case $target_thread_file in posix) @@ -3163,7 +3179,10 @@ AC_MSG_CHECKING([for gthreads library]) - AC_TRY_COMPILE([#include "gthr.h"], + AC_TRY_COMPILE([ + #include "gthr.h" + #include + ], [ #ifndef __GTHREADS_CXX0X #error Index: gcc/gthr-posix.h =================================================================== --- gcc/gthr-posix.h (revision 176310) +++ gcc/gthr-posix.h (working copy) @@ -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,10 @@ #endif #include + +#if defined(_LIBOBJC) || defined(_LIBOBJC_WEAK) #include +#endif typedef pthread_t __gthread_t; typedef pthread_key_t __gthread_key_t; @@ -100,11 +103,9 @@ __gthrw3(pthread_mutex_lock) __gthrw3(pthread_mutex_trylock) -#ifdef _POSIX_TIMEOUTS -#if _POSIX_TIMEOUTS >= 0 +#ifdef _GTHREADS_ASSUME_POSIX_TIMEOUTS __gthrw3(pthread_mutex_timedlock) #endif -#endif /* _POSIX_TIMEOUTS */ __gthrw3(pthread_mutex_unlock) __gthrw3(pthread_mutex_init) __gthrw3(pthread_mutex_destroy) @@ -131,11 +132,9 @@ __gthrw(pthread_mutex_lock) __gthrw(pthread_mutex_trylock) -#ifdef _POSIX_TIMEOUTS -#if _POSIX_TIMEOUTS >= 0 +#ifdef _GTHREADS_ASSUME_POSIX_TIMEOUTS __gthrw(pthread_mutex_timedlock) #endif -#endif /* _POSIX_TIMEOUTS */ __gthrw(pthread_mutex_unlock) __gthrw(pthread_mutex_init) __gthrw(pthread_mutex_destroy) @@ -753,8 +752,7 @@ return 0; } -#ifdef _POSIX_TIMEOUTS -#if _POSIX_TIMEOUTS >= 0 +#ifdef _GTHREADS_ASSUME_POSIX_TIMEOUTS static inline int __gthread_mutex_timedlock (__gthread_mutex_t *__mutex, const __gthread_time_t *__abs_timeout) @@ -765,7 +763,6 @@ return 0; } #endif -#endif static inline int __gthread_mutex_unlock (__gthread_mutex_t *__mutex) @@ -811,8 +808,7 @@ return __gthread_mutex_trylock (__mutex); } -#ifdef _POSIX_TIMEOUTS -#if _POSIX_TIMEOUTS >= 0 +#ifdef _GTHREADS_ASSUME_POSIX_TIMEOUTS static inline int __gthread_recursive_mutex_timedlock (__gthread_recursive_mutex_t *__mutex, const __gthread_time_t *__abs_timeout) @@ -820,7 +816,6 @@ return __gthread_mutex_timedlock (__mutex, __abs_timeout); } #endif -#endif static inline int __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)