Commit f436d2ff by Iain Sandoe

encoding.c (_darwin_rs6000_special_round_type_align): New.


libobjc:

	* encoding.c (_darwin_rs6000_special_round_type_align): New.
	(darwin_rs6000_special_round_type_align): Adjust to use new routine.

testsuite:

	* objc.dg/gnu-encoding/struct-layout-encoding-1_generate.c: Adjust XFAILs.

From-SVN: r167741
parent b403760c
2010-12-13 Iain Sandoe <iains@gcc.gnu.org>
* objc.dg/gnu-encoding/struct-layout-encoding-1_generate.c:
Adjust XFAILs.
2010-12-13 Alexandre Oliva <aoliva@redhat.com>
PR debug/46576
......
......@@ -221,9 +221,9 @@ switchfiles (int fields)
fputs ("failed to create test files\n", stderr);
exit (1);
}
/* FIXME: these tests should not be xfailed on PowerPC darwin or aix
but they are because libobjc uses GCC's headers for trying to find
the struct layout but it gets it wrong. */
/* FIXME: these tests should not be xfailed on aix but they are because
libobjc uses GCC's headers for trying to find the struct layout but it
gets it wrong. */
if (filecnt == 2
|| filecnt == 3
|| filecnt == 4
......@@ -236,7 +236,7 @@ switchfiles (int fields)
|| filecnt == 22)
{
fprintf (outfile, "\
/* { dg-do run { xfail { { \"powerpc*-*-darwin*\" && { ! lp64 } } || { \"powerpc*-*-aix*\" } } } } */\n\
/* { dg-do run { xfail { \"powerpc*-*-aix*\" } } } */\n\
/* { dg-options \"-w -I%s -fgnu-runtime\" } */\n", srcdir);
}
/* FIXME: these should not be xfailed but they are because
......
2010-12-13 Iain Sandoe <iains@gcc.gnu.org>
* encoding.c (_darwin_rs6000_special_round_type_align): New.
(darwin_rs6000_special_round_type_align): Adjust to use new routine.
2010-12-11 Nicola Pero <nicola.pero@meta-innovation.com>
* sendmsg.c (selector_resolveClassMethod): New.
......
......@@ -117,27 +117,55 @@ static int __attribute__ ((__unused__)) not_target_flags = 0;
to a static variable, initialized by target overrides. This is reset
in linux64.h but not in darwin64.h. The macro is not used by *86*. */
#if __MACH__ && __LP64__
# undef TARGET_ALIGN_NATURAL
# define TARGET_ALIGN_NATURAL 1
#if __MACH__
# if __LP64__
# undef TARGET_ALIGN_NATURAL
# define TARGET_ALIGN_NATURAL 1
# endif
/* On Darwin32, we need to recurse until we find the starting stuct type. */
static int
_darwin_rs6000_special_round_type_align (const char *struc, int comp, int spec)
{
const char *_stp , *_fields = TYPE_FIELDS (struc);
if (!_fields)
return MAX (comp, spec);
_stp = strip_array_types (_fields);
if (TYPE_MODE(_stp) == _C_COMPLEX)
_stp++;
switch (TYPE_MODE(_stp))
{
case RECORD_TYPE:
case UNION_TYPE:
return MAX (MAX (comp, spec), objc_alignof_type (_stp) * BITS_PER_UNIT);
break;
case DFmode:
case _C_LNG_LNG:
case _C_ULNG_LNG:
return MAX (MAX (comp, spec), 64);
break;
default:
return MAX (comp, spec);
break;
}
}
/* See comment below. */
#define darwin_rs6000_special_round_type_align(S,C,S2) \
(_darwin_rs6000_special_round_type_align ((char*)(S), (int)(C), (int)(S2)))
#endif
/* FIXME: while this file has no business including tm.h, this
definitely has no business defining this macro but it
is only way around without really rewritting this file,
should look after the branch of 3.4 to fix this.
FIXME1: It's also out of date, darwin no longer has the same alignment
'special' as aix - this is probably the origin of the m32 breakage. */
should look after the branch of 3.4 to fix this. */
#define rs6000_special_round_type_align(STRUCT, COMPUTED, SPECIFIED) \
({ const char *_fields = TYPE_FIELDS (STRUCT); \
((_fields != 0 \
&& TYPE_MODE (strip_array_types (TREE_TYPE (_fields))) == DFmode) \
? MAX (MAX (COMPUTED, SPECIFIED), 64) \
: MAX (COMPUTED, SPECIFIED));})
/* FIXME: The word 'fixme' is insufficient to explain the wrong-ness
of this next macro definition. */
#define darwin_rs6000_special_round_type_align(S,C,S2) \
rs6000_special_round_type_align(S,C,S2)
/* Skip a variable name, enclosed in quotes ("). */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment