diff options
author | Martin Uecker <uecker@tugraz.at> | 2024-06-29 15:36:18 +0200 |
---|---|---|
committer | Martin Uecker <uecker@gcc.gnu.org> | 2024-07-09 21:05:26 +0200 |
commit | 592a746533a278a5fd3e7b5dff004e1846ef26a4 (patch) | |
tree | 28dce17004e5a5f591515be582de2fc3ed52b009 /gcc/c | |
parent | e611189899bb885a27ef8d17f77c02ada6c69069 (diff) | |
download | gcc-592a746533a278a5fd3e7b5dff004e1846ef26a4.zip gcc-592a746533a278a5fd3e7b5dff004e1846ef26a4.tar.gz gcc-592a746533a278a5fd3e7b5dff004e1846ef26a4.tar.bz2 |
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.
Diffstat (limited to 'gcc/c')
-rw-r--r-- | gcc/c/c-typeck.cc | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc index ffcab7d..e486ac0 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)) |