From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 129574 invoked by alias); 2 May 2015 03:36:29 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 129561 invoked by uid 89); 2 May 2015 03:36:28 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=1.2 required=5.0 tests=AWL,BAYES_50,FREEMAIL_FROM,MIME_QP_LONG_LINE,RCVD_IN_DNSWL_LOW,SPF_PASS,URIBL_BLACK autolearn=no version=3.3.2 X-HELO: mail-pd0-f175.google.com Received: from mail-pd0-f175.google.com (HELO mail-pd0-f175.google.com) (209.85.192.175) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Sat, 02 May 2015 03:36:27 +0000 Received: by pdbqd1 with SMTP id qd1so109614009pdb.2 for ; Fri, 01 May 2015 20:36:25 -0700 (PDT) X-Received: by 10.70.138.38 with SMTP id qn6mr22874226pdb.119.1430537785302; Fri, 01 May 2015 20:36:25 -0700 (PDT) Received: from [192.168.1.35] (76-253-1-90.lightspeed.sntcca.sbcglobal.net. [76.253.1.90]) by mx.google.com with ESMTPSA id p5sm6179952pdi.2.2015.05.01.20.36.23 (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 01 May 2015 20:36:24 -0700 (PDT) References: <1430537453-25556-1-git-send-email-tbsaunde+gcc@tbsaunde.org> Mime-Version: 1.0 (1.0) In-Reply-To: <1430537453-25556-1-git-send-email-tbsaunde+gcc@tbsaunde.org> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Message-Id: Cc: "gcc-patches@gcc.gnu.org" From: pinskia@gmail.com Subject: Re: [PATCH] fixup libobjc usage of PCC_BITFIELD_TYPE_MATTERS Date: Sat, 02 May 2015 03:36:00 -0000 To: "tbsaunde+gcc@tbsaunde.org" X-IsSubscribed: yes X-SW-Source: 2015-05/txt/msg00117.txt.bz2 > On May 1, 2015, at 8:30 PM, tbsaunde+gcc@tbsaunde.org wrote: >=20 > From: Trevor Saunders >=20 > Hi, >=20 > This adds a configure check to libobjc to find out if types of bitfields = effect > their layout, and uses it to replace the rather broken usage of > PCC_BITFIELD_TYPE_MATTERS. >=20 > bootstrapped + regtested x86_64-linux-gnu, bootstrapped on ppc64le-linux-= gnu > and ran check-objc there without failures, and checked the correct part o= f the > ifdef is used on a cross to m68k-linux-elf. ok? I'm sure I've gotten > something wrong since this is a bunch of auto tools ;-) This is ok. I have been meaning to try to get rid of all uses of the targe= t headers but never got around to finishing it.=20 Thanks, Andrew >=20 > Trev >=20 > libobjc/ChangeLog: >=20 > 2015-05-01 Trevor Saunders >=20 > * acinclude.m4: Include bitfields.m4. > * config.h.in: Regenerate. > * configure: Likewise. > * configure.ac: Invoke gt_BITFIELD_TYPE_MATTERS. > * encoding.c: Check HAVE_BITFIELD_TYPE_MATTERS. >=20 > config/ChangeLog: >=20 > 2015-05-01 Trevor Saunders >=20 > * bitfields.m4: New file. > --- > config/bitfields.m4 | 26 ++++++++++++++++++++++++++ > libobjc/acinclude.m4 | 1 + > libobjc/config.h.in | 3 +++ > libobjc/configure | 38 ++++++++++++++++++++++++++++++++++++++ > libobjc/configure.ac | 2 ++ > libobjc/encoding.c | 3 ++- > 6 files changed, 72 insertions(+), 1 deletion(-) > create mode 100644 config/bitfields.m4 >=20 > diff --git a/config/bitfields.m4 b/config/bitfields.m4 > new file mode 100644 > index 0000000..ee8f3b5 > --- /dev/null > +++ b/config/bitfields.m4 > @@ -0,0 +1,26 @@ > +dnl Copyright (C) 2015 Free Software Foundation, Inc. > +dnl This file is free software, distributed under the terms of the GNU > +dnl General Public License. As a special exception to the GNU General > +dnl Public License, this file may be distributed as part of a program > +dnl that contains a configuration script generated by Autoconf, under > +dnl the same distribution terms as the rest of that program. > + > +# Define HAVE_BITFIELD_TYPE_MATTERS if the type of bitfields effects the= ir > +# alignment. > + > +AC_DEFUN([gt_BITFIELD_TYPE_MATTERS], > +[ > + AC_CACHE_CHECK([if the type of bitfields matters], gt_cv_bitfield_type= _matters, > + [ > + AC_TRY_COMPILE( > + [struct foo1 { char x; char :0; char y; }; > +struct foo2 { char x; int :0; char y; }; > +int foo1test[ sizeof (struct foo1) =3D=3D 2 ? 1 : -1 ]; > +int foo2test[ sizeof (struct foo2) =3D=3D 5 ? 1 : -1]; ], > + [], gt_cv_bitfield_type_matters=3Dyes, gt_cv_bitfield_type_matters= =3Dno) > + ]) > + if test $gt_cv_bitfield_type_matters =3D yes; then > + AC_DEFINE(HAVE_BITFIELD_TYPE_MATTERS, 1, > + [Define if the type of bitfields effects alignment.]) > + fi > +]) > diff --git a/libobjc/acinclude.m4 b/libobjc/acinclude.m4 > index bf78dbe..4193018 100644 > --- a/libobjc/acinclude.m4 > +++ b/libobjc/acinclude.m4 > @@ -12,6 +12,7 @@ m4_include(../config/acx.m4) > m4_include(../config/no-executables.m4) > m4_include(../config/enable.m4) > m4_include(../config/tls.m4) > +m4_include(../config/bitfields.m4) >=20 > m4_include(../libtool.m4) > dnl The lines below arrange for aclocal not to bring an installed > diff --git a/libobjc/config.h.in b/libobjc/config.h.in > index c055e7c..20d1fca 100644 > --- a/libobjc/config.h.in > +++ b/libobjc/config.h.in > @@ -1,5 +1,8 @@ > /* config.h.in. Generated from configure.ac by autoheader. */ >=20 > +/* Define if the type of bitfields effects alignment. */ > +#undef HAVE_BITFIELD_TYPE_MATTERS > + > /* Define to 1 if the target assembler supports thread-local storage. */ > #undef HAVE_CC_TLS >=20 > diff --git a/libobjc/configure b/libobjc/configure > index 642eb9c..0547f91 100755 > --- a/libobjc/configure > +++ b/libobjc/configure > @@ -11530,6 +11530,44 @@ ac_compiler_gnu=3D$ac_cv_c_compiler_gnu > { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_exception_model_name= " >&5 > $as_echo "$ac_exception_model_name" >&6; } >=20 > + > + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the type of bitfi= elds matters" >&5 > +$as_echo_n "checking if the type of bitfields matters... " >&6; } > +if test "${gt_cv_bitfield_type_matters+set}" =3D set; then : > + $as_echo_n "(cached) " >&6 > +else > + > + cat confdefs.h - <<_ACEOF >conftest.$ac_ext > +/* end confdefs.h. */ > +struct foo1 { char x; char :0; char y; }; > +struct foo2 { char x; int :0; char y; }; > +int foo1test[ sizeof (struct foo1) =3D=3D 2 ? 1 : -1 ]; > +int foo2test[ sizeof (struct foo2) =3D=3D 5 ? 1 : -1]; > +int > +main () > +{ > + > + ; > + return 0; > +} > +_ACEOF > +if ac_fn_c_try_compile "$LINENO"; then : > + gt_cv_bitfield_type_matters=3Dyes > +else > + gt_cv_bitfield_type_matters=3Dno > +fi > +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext > + > +fi > +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_bitfield_type_ma= tters" >&5 > +$as_echo "$gt_cv_bitfield_type_matters" >&6; } > + if test $gt_cv_bitfield_type_matters =3D yes; then > + > +$as_echo "#define HAVE_BITFIELD_TYPE_MATTERS 1" >>confdefs.h > + > + fi > + > + > # ------ > # Output > # ------ > diff --git a/libobjc/configure.ac b/libobjc/configure.ac > index c794a80..2d88519 100644 > --- a/libobjc/configure.ac > +++ b/libobjc/configure.ac > @@ -266,6 +266,8 @@ fi > AC_LANG_POP(C) > AC_MSG_RESULT($ac_exception_model_name) >=20 > +gt_BITFIELD_TYPE_MATTERS > + > # ------ > # Output > # ------ > diff --git a/libobjc/encoding.c b/libobjc/encoding.c > index 20ace46..abb6145 100644 > --- a/libobjc/encoding.c > +++ b/libobjc/encoding.c > @@ -29,6 +29,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively= . If not, see > /* FIXME: This file contains functions that will abort the entire > program if they fail. Is that really needed ? */ >=20 > +#include "config.h" > #include "objc-private/common.h" > #include "objc-private/error.h" > #include "tconfig.h" > @@ -1167,7 +1168,7 @@ objc_layout_structure_next_member (struct objc_stru= ct_layout *layout) > /* Record must have at least as much alignment as any field. > Otherwise, the alignment of the field within the record > is meaningless. */ > -#if !PCC_BITFIELD_TYPE_MATTERS > +#ifndef HAVE_BITFIELD_TYPE_MATTERS > layout->record_align =3D MAX (layout->record_align, desired_align); > #else /* PCC_BITFIELD_TYPE_MATTERS */ > if (*type =3D=3D _C_BFLD) > --=20 > 2.3.0.80.g18d0fec.dirty >=20