aboutsummaryrefslogtreecommitdiff
path: root/mkdep
diff options
context:
space:
mode:
authorMarek Polacek <polacek@redhat.com>2021-12-04 12:07:41 -0500
committerMarek Polacek <polacek@redhat.com>2021-12-07 08:26:25 -0500
commit3a2257e6b3fa288d6c50831987949b9ff7dfb865 (patch)
tree90a5927585968e6fbe3f12a1432dbb6a8c7959f5 /mkdep
parent7ef68c37b3a46e69ed4a5ff6b2b368e2c9a8023f (diff)
downloadgcc-3a2257e6b3fa288d6c50831987949b9ff7dfb865.zip
gcc-3a2257e6b3fa288d6c50831987949b9ff7dfb865.tar.gz
gcc-3a2257e6b3fa288d6c50831987949b9ff7dfb865.tar.bz2
c++: Fix for decltype and bit-fields [PR95009]
Here, decltype deduces the wrong type for certain expressions involving bit-fields. Unlike in C, in C++ bit-field width is explicitly not part of the type, so I think decltype should never deduce to 'int:N'. The problem isn't that we're not calling unlowered_expr_type--we are--it's that is_bitfield_expr_with_lowered_type only handles certain codes, but not others. For example, += works fine but ++ does not. This also fixes decltype-bitfield2.C where we were crashing (!), but unfortunately it does not fix 84516 or 70733 where the problem is likely a missing call to unlowered_expr_type. It occurs to me now that typeof likely has had the same issue, but this patch should fix that too. PR c++/95009 gcc/cp/ChangeLog: * typeck.c (is_bitfield_expr_with_lowered_type) <case MODIFY_EXPR>: Handle UNARY_PLUS_EXPR, NEGATE_EXPR, NON_LVALUE_EXPR, BIT_NOT_EXPR, P*CREMENT_EXPR too. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/decltype-bitfield1.C: New test. * g++.dg/cpp0x/decltype-bitfield2.C: New test.
Diffstat (limited to 'mkdep')
0 files changed, 0 insertions, 0 deletions