Here is a small patch fixing an error recovery issue.

Bootstrapped and regression tested on x86_64.


commit 465773af2bdd552184b935e5dc6b3db9e0e4e327
Author: Martin Uecker <uec...@tugraz.at>
Date:   Sat Mar 1 17:21:25 2025 +0100

    c: Fix ICE in error recovery when checking struct compatibility [PR118061]
    
    Return early when comparing two structures for compatibility
    and the type of a member is erroneous.
    
            PR c/118061
    
    gcc/ChangeLog:
            * c/c-typeck.cc (tagged_types_tu_compatible_p): Handle
            errors in types of struct members.
    
    gcc/testsuite/ChangeLog:
            * gcc.dg/pr118061.c: New test.

diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc
index 11fa98d86ee..1a39cbb2009 100644
--- a/gcc/c/c-typeck.cc
+++ b/gcc/c/c-typeck.cc
@@ -1933,6 +1933,9 @@ tagged_types_tu_compatible_p (const_tree t1, const_tree 
t2,
                ft2 = DECL_BIT_FIELD_TYPE (s2);
              }
 
+           if (TREE_CODE (ft1) == ERROR_MARK || TREE_CODE (ft2) == ERROR_MARK)
+             return false;
+
            data->anon_field = !DECL_NAME (s1);
            data->pointedto = false;
 
diff --git a/gcc/testsuite/gcc.dg/pr118061.c b/gcc/testsuite/gcc.dg/pr118061.c
new file mode 100644
index 00000000000..6efc94d9e3b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr118061.c
@@ -0,0 +1,8 @@
+/* { dg-do "compile" } */
+/* { dg-options "-std=gnu23" } */
+
+int main()
+{
+    struct { int x[1++]; } x;  /* { dg-error "lvalue required as increment 
operand" } */
+    struct { int x[1++]; } y;  /* { dg-error "lvalue required as increment 
operand" } */
+}

Reply via email to