https://gcc.gnu.org/g:592a746533a278a5fd3e7b5dff004e1846ef26a4
commit r15-1928-g592a746533a278a5fd3e7b5dff004e1846ef26a4 Author: Martin Uecker <uec...@tugraz.at> Date: Sat Jun 29 15:36:18 2024 +0200 c: Fix ICE for incorrect code in comptypes_verify [PR115696] The new verification code produces an ICE for incorrect code. Add the same logic as already used in comptypes to to bail out under certain conditions. PR c/115696 gcc/c/ * c-typeck.cc (comptypes_verify): Bail out for identical, empty, and erroneous input types. gcc/testsuite/ * gcc.dg/pr115696.c: New test. Diff: --- gcc/c/c-typeck.cc | 4 ++++ gcc/testsuite/gcc.dg/pr115696.c | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc index ffcab7df4d3b..e486ac04f9cf 100644 --- a/gcc/c/c-typeck.cc +++ b/gcc/c/c-typeck.cc @@ -1175,6 +1175,10 @@ common_type (tree t1, tree t2) static bool comptypes_verify (tree type1, tree type2) { + if (type1 == type2 || !type1 || !type2 + || TREE_CODE (type1) == ERROR_MARK || TREE_CODE (type2) == ERROR_MARK) + return true; + if (TYPE_CANONICAL (type1) != TYPE_CANONICAL (type2) && !TYPE_STRUCTURAL_EQUALITY_P (type1) && !TYPE_STRUCTURAL_EQUALITY_P (type2)) diff --git a/gcc/testsuite/gcc.dg/pr115696.c b/gcc/testsuite/gcc.dg/pr115696.c new file mode 100644 index 000000000000..50b8ebc24f08 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr115696.c @@ -0,0 +1,7 @@ +/* { dg-do compile } */ +/* { dg-options "-Wno-implicit-int" } */ + +a(); /* { dg-warning "no type or storage" } */ +a; /* { dg-error "redeclared" } */ + /* { dg-warning "no type or storage" "" { target *-*-* } .-1 } */ +a(); /* { dg-warning "no type or storage" } */