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;
+}
+

Reply via email to