https://gcc.gnu.org/g:f1ab4c518c72d7981edf910b1bd4ccf7970e08bb
commit r16-3029-gf1ab4c518c72d7981edf910b1bd4ccf7970e08bb Author: Martin Uecker <uec...@tugraz.at> Date: Mon Jul 28 13:12:14 2025 +0200 c: Fix ICE on invalid code involving bit fields [PR121217] Under some error condition we can end up with NULL_TREEs for the type of bitfields, which can cause an ICE when testing for type compatibility. Add the missing check. PR c/121217 gcc/c/ChangeLog: * c-typeck.cc (tagged_types_tu_compatible_p): Add check. gcc/testsuite/ChangeLog: * gcc.dg/pr121217.c: New test. Diff: --- gcc/c/c-typeck.cc | 3 +++ gcc/testsuite/gcc.dg/pr121217.c | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc index b192663085c0..e0d0a441302a 100644 --- a/gcc/c/c-typeck.cc +++ b/gcc/c/c-typeck.cc @@ -1970,6 +1970,9 @@ tagged_types_tu_compatible_p (const_tree t1, const_tree t2, ft2 = DECL_BIT_FIELD_TYPE (s2); } + if (!ft1 || !ft2) + return false; + if (TREE_CODE (ft1) == ERROR_MARK || TREE_CODE (ft2) == ERROR_MARK) return false; diff --git a/gcc/testsuite/gcc.dg/pr121217.c b/gcc/testsuite/gcc.dg/pr121217.c new file mode 100644 index 000000000000..313f1e317a6c --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr121217.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-std=gnu17" } */ + +typedef union{ + char *nordic_ref; + unsigned long long int bit_number; + enum PinMode mode : 2; /* { dg-warning "narrower" } */ + /* { dg-error "field 'mode'" "" { target *-*-* } .-1 } */ + unsigned char value; + } s; typedef struct{ + union{ + char *nordic_ref; + unsigned long long int bit_number; + enum PinMode mode : 2; /* { dg-warning "narrower" } */ + /* { dg-error "field 'mode'" "" { target *-*-* } .-1 } */ + unsigned char value; + } s; +} /* { dg-error "expected identifier" } */ +