https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89351
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jakub at gcc dot gnu.org,
| |rth at gcc dot gnu.org,
| |torvald at gcc dot gnu.org
--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Cleaned up testcase with -fgnu-tm:
struct S { int a : 5; unsigned b : 7; } c[1][1];
void
foo (int x)
{
}
void
bar (void)
{
__transaction_relaxed {
foo (c[0][1].b);
}
}
Seems the TM code can't deal with bitfields properly:
_15 = __builtin__ITM_RU1 (&c[0][1].b);
taking address of a bitfield is invalid. Dunno what exactly it should do,
perhaps tak address of the DECL_BIT_FIELD_REPRESENTATIVE and read the
DECL_BIT_FIELD_REPRESENTATIVE instead and then BIT_FIELD_REF or something
similar out of this? And similarly deal somehow with the stores to bitfields
(that is actually a read modify write cycle that likely would need to be
exposed.
That said, -fgnu-tm is pretty much unmaintained for years, so maybe best would
be to remove that support (e.g. I believe it doesn't handle internal functions
at all, which appear commonly in the IL these days, doesn't handle various
builtins correctly, etc.).