fixup libobjc usage of PCC_BITFIELD_TYPE_MATTERS

libobjc/ChangeLog:

2015-05-01  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>

	* 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.

config/ChangeLog:

2015-05-01  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>

	* bitfields.m4: New file.

From-SVN: r222715
This commit is contained in:
Trevor Saunders 2015-05-02 04:11:07 +00:00
parent 90eb63a3a0
commit 539280a8e8
6 changed files with 72 additions and 1 deletions

26
config/bitfields.m4 Normal file
View File

@ -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 their
# 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) == 2 ? 1 : -1 ];
int foo2test[ sizeof (struct foo2) == 5 ? 1 : -1]; ],
[], gt_cv_bitfield_type_matters=yes, gt_cv_bitfield_type_matters=no)
])
if test $gt_cv_bitfield_type_matters = yes; then
AC_DEFINE(HAVE_BITFIELD_TYPE_MATTERS, 1,
[Define if the type of bitfields effects alignment.])
fi
])

View File

@ -12,6 +12,7 @@ m4_include(../config/acx.m4)
m4_include(../config/no-executables.m4) m4_include(../config/no-executables.m4)
m4_include(../config/enable.m4) m4_include(../config/enable.m4)
m4_include(../config/tls.m4) m4_include(../config/tls.m4)
m4_include(../config/bitfields.m4)
m4_include(../libtool.m4) m4_include(../libtool.m4)
dnl The lines below arrange for aclocal not to bring an installed dnl The lines below arrange for aclocal not to bring an installed

View File

@ -1,5 +1,8 @@
/* config.h.in. Generated from configure.ac by autoheader. */ /* config.h.in. Generated from configure.ac by autoheader. */
/* Define if the type of bitfields effects alignment. */
#undef HAVE_BITFIELD_TYPE_MATTERS
/* Define to 1 if the target assembler supports thread-local storage. */ /* Define to 1 if the target assembler supports thread-local storage. */
#undef HAVE_CC_TLS #undef HAVE_CC_TLS

38
libobjc/configure vendored
View File

@ -11530,6 +11530,44 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_exception_model_name" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_exception_model_name" >&5
$as_echo "$ac_exception_model_name" >&6; } $as_echo "$ac_exception_model_name" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the type of bitfields matters" >&5
$as_echo_n "checking if the type of bitfields matters... " >&6; }
if test "${gt_cv_bitfield_type_matters+set}" = 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) == 2 ? 1 : -1 ];
int foo2test[ sizeof (struct foo2) == 5 ? 1 : -1];
int
main ()
{
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
gt_cv_bitfield_type_matters=yes
else
gt_cv_bitfield_type_matters=no
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_matters" >&5
$as_echo "$gt_cv_bitfield_type_matters" >&6; }
if test $gt_cv_bitfield_type_matters = yes; then
$as_echo "#define HAVE_BITFIELD_TYPE_MATTERS 1" >>confdefs.h
fi
# ------ # ------
# Output # Output
# ------ # ------

View File

@ -266,6 +266,8 @@ fi
AC_LANG_POP(C) AC_LANG_POP(C)
AC_MSG_RESULT($ac_exception_model_name) AC_MSG_RESULT($ac_exception_model_name)
gt_BITFIELD_TYPE_MATTERS
# ------ # ------
# Output # Output
# ------ # ------

View File

@ -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 /* FIXME: This file contains functions that will abort the entire
program if they fail. Is that really needed ? */ program if they fail. Is that really needed ? */
#include "config.h"
#include "objc-private/common.h" #include "objc-private/common.h"
#include "objc-private/error.h" #include "objc-private/error.h"
#include "tconfig.h" #include "tconfig.h"
@ -1167,7 +1168,7 @@ objc_layout_structure_next_member (struct objc_struct_layout *layout)
/* Record must have at least as much alignment as any field. /* Record must have at least as much alignment as any field.
Otherwise, the alignment of the field within the record Otherwise, the alignment of the field within the record
is meaningless. */ is meaningless. */
#if !PCC_BITFIELD_TYPE_MATTERS #ifndef HAVE_BITFIELD_TYPE_MATTERS
layout->record_align = MAX (layout->record_align, desired_align); layout->record_align = MAX (layout->record_align, desired_align);
#else /* PCC_BITFIELD_TYPE_MATTERS */ #else /* PCC_BITFIELD_TYPE_MATTERS */
if (*type == _C_BFLD) if (*type == _C_BFLD)