https://gcc.gnu.org/bugzilla/show_bug.cgi?id=127383
--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
More complete testcase:
#define expr_has_type(e, t) _Generic (e, default : 0, t : 1)
struct S { _BitInt(195) a : 193; const unsigned _BitInt(195) b : 193; volatile
_BitInt(195) c : 193; const volatile unsigned _BitInt(195) d : 193; };
struct S s;
struct S foo ();
static_assert (expr_has_type (+s.a, _BitInt(195)));
static_assert (expr_has_type (+s.b, unsigned _BitInt(195)));
static_assert (expr_has_type (+s.c, _BitInt(195)));
static_assert (expr_has_type (+s.d, unsigned _BitInt(195)));
static_assert (expr_has_type ((_BitInt(193))s.a, _BitInt(193)));
static_assert (expr_has_type ((unsigned _BitInt(193))s.b, unsigned
_BitInt(193)));
static_assert (expr_has_type ((_BitInt(193))s.c, _BitInt(193)));
static_assert (expr_has_type ((unsigned _BitInt(193))s.d, unsigned
_BitInt(193)));
static_assert (expr_has_type (+(_BitInt(193))s.a, _BitInt(193)));
static_assert (expr_has_type (+(unsigned _BitInt(193))s.b, unsigned
_BitInt(193)));
static_assert (expr_has_type (+(_BitInt(193))s.c, _BitInt(193)));
static_assert (expr_has_type (+(unsigned _BitInt(193))s.d, unsigned
_BitInt(193)));
static_assert (expr_has_type (+foo ().a, _BitInt(195)));
static_assert (expr_has_type (+foo ().b, unsigned _BitInt(195)));
static_assert (expr_has_type (+foo ().c, _BitInt(195)));
static_assert (expr_has_type (+foo ().d, unsigned _BitInt(195)));
static_assert (expr_has_type ((_BitInt(193))foo ().a, _BitInt(193)));
static_assert (expr_has_type ((unsigned _BitInt(193))foo ().b, unsigned
_BitInt(193)));
static_assert (expr_has_type ((_BitInt(193))foo ().c, _BitInt(193)));
static_assert (expr_has_type ((unsigned _BitInt(193))foo ().d, unsigned
_BitInt(193)));
static_assert (expr_has_type (+(_BitInt(193))foo ().a, _BitInt(193)));
static_assert (expr_has_type (+(unsigned _BitInt(193))foo ().b, unsigned
_BitInt(193)));
static_assert (expr_has_type (+(_BitInt(193))foo ().c, _BitInt(193)));
static_assert (expr_has_type (+(unsigned _BitInt(193))foo ().d, unsigned
_BitInt(193)));
Unpatched gcc fails on the +(cast) cases (8 failed static assertions).
Note, clang trunk instead fails on the +s.{b,c,d} and +foo ().{b,c,d} cases.