Fixes an ICE on invalid code (15/16 regression).
Bootstrapped and regression tested on x86_64. 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/pr121271.c: New test. diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc index 120875e25fa..96eb5a76e20 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 00000000000..3b6d45e1d4c --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr121217.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ + +typedef union{ + char *nordic_ref; + unsigned long long int bit_number; + enum PinMode mode : 2; /* { dg-warning "narrower" } */ + /* { dg-error "field mode" "" { *-*-* } .-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" "" { *-*-* } .-1 } */ + unsigned char value; + } s; +} +