https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119537
--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> --- --- gcc/gimplify.cc.jj 2025-03-31 12:53:44.853727077 +0200 +++ gcc/gimplify.cc 2025-03-31 17:05:40.854893880 +0200 @@ -4508,6 +4508,21 @@ gimplify_variant_call_expr (tree expr, f } +/* Helper function for gimplify_call_expr, called via walk_tree. + Find used user labels. */ + +static tree +find_used_user_labels (tree *tp, int *, void *) +{ + if (TREE_CODE (*tp) == LABEL_EXPR + && !DECL_ARTIFICIAL (LABEL_EXPR_LABEL (*tp)) + && DECL_NAME (LABEL_EXPR_LABEL (*tp)) + && TREE_USED (LABEL_EXPR_LABEL (*tp))) + return *tp; + return NULL_TREE; +} + + /* Gimplify the CALL_EXPR node *EXPR_P into the GIMPLE sequence PRE_P. WANT_VALUE is true if the result of the call is desired. */ @@ -4568,8 +4583,14 @@ gimplify_call_expr (tree *expr_p, gimple fndecl, 0)); return GS_OK; } - /* If not optimizing, ignore the assumptions. */ - if (!optimize || seen_error ()) + /* If not optimizing, ignore the assumptions unless there + are used user labels in it. */ + if ((!optimize + && !walk_tree_without_duplicates (&CALL_EXPR_ARG (*expr_p, + 0), + find_used_user_labels, + NULL)) + || seen_error ()) { *expr_p = NULL_TREE; return GS_ALL_DONE; fixes the ICE during cfg pass ICE, but it then ICEs during IRA: error: wrong number of branch edges after unconditional jump in bb 2. So guess we'll need to search for &&label in the IL outside of the assume operands referencing labels inside of those operands (and maybe vice versa) during the lowering pass.