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.
--- /dev/null
+/* 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" } */
+}
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)
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);
}