PR c/123716: Fix an unexpected error_mark_node ICE.

This patch resolves the P4 regression PR c/123716.

2026-02-22  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
	PR c/123716
	* tree.cc (tree_nop_conversion_p): Move sanity checks on
	inner_type to here...
	(tree_nop_conversion): ... from here.

gcc/testsuite/ChangeLog
	PR c/123716
	* gcc.dg/pr123716.c: New test case.
This commit is contained in:
Roger Sayle
2026-02-22 22:32:05 +00:00
parent 6e35a5d5b2
commit 7bd059e28d
2 changed files with 12 additions and 2 deletions

View File

@@ -0,0 +1,9 @@
/* PR c/123716 */
/* { dg-do compile } */
/* { dg-options "-O2" } */
int f(unsigned s)
{
int i;
for (i = 0; i < s; ++i);
unsigned i[1]; /* { dg-error "conflicting type" } */
}

View File

@@ -12333,6 +12333,9 @@ block_ultimate_origin (const_tree block)
bool
tree_nop_conversion_p (const_tree outer_type, const_tree inner_type)
{
if (!inner_type || inner_type == error_mark_node)
return false;
/* Do not strip casts into or out of differing address spaces. */
if (POINTER_TYPE_P (outer_type)
&& TYPE_ADDR_SPACE (TREE_TYPE (outer_type)) != ADDR_SPACE_GENERIC)
@@ -12382,8 +12385,6 @@ tree_nop_conversion (const_tree exp)
outer_type = TREE_TYPE (exp);
inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
if (!inner_type || inner_type == error_mark_node)
return false;
return tree_nop_conversion_p (outer_type, inner_type);
}