[PATCH][4/5] Handle internal_fn in operand_equal_p

Richard Biener rguenther@suse.de
Thu Feb 19 12:49:00 GMT 2015


On Thu, 19 Feb 2015, Tom de Vries wrote:

> On 19-02-15 11:29, Tom de Vries wrote:
> > Hi,
> > 
> > I'm posting this patch series for stage1:
> > - 0001-Disable-lang_hooks.gimplify_expr-in-free_lang_data.patch
> > - 0002-Add-gimple_find_sub_bbs.patch
> > - 0003-Factor-optimize_va_list_gpr_fpr_size-out-of-pass_std.patch
> > - 0004-Handle-internal_fn-in-operand_equal_p.patch
> > - 0005-Postpone-expanding-va_arg-until-pass_stdarg.patch
> > 
> > The patch series - based on Michael's initial patch - postpones expanding
> > va_arg
> > until pass_stdarg, which makes pass_stdarg more robust.
> > 
> > Bootstrapped and reg-tested on x86_64 using all languages, with unix/ and
> > unix/-m32 testing.
> > 
> > I'll post the patches in reply to this email.
> > 
> 
> This patch adds handling of internal functions in operand_equal_p.
> 
> I ran into a situation here in operand_equal_p where it segfaulted on the
> internal function IFN_VA_ARG, because  the CALL_EXPR_FN of an internal
> function is NULL, and operand_equal_p does not expect NULL arguments:
> ...
>         case CALL_EXPR:
>           /* If the CALL_EXPRs call different functions, then they
>              clearly can not be equal.  */
>           if (! operand_equal_p (CALL_EXPR_FN (arg0), CALL_EXPR_FN (arg1),
>                                  flags))
>             return 0;
> ...
> 
> This patch fixes that by testing if CALL_EXPR_FN is NULL.
> 
> OK for stage1?

I'd call it a bug though, and we do have internal fns in
generic already thus the issue is latent (with ubsan at least).

Which means ok for trunk now.

Thanks,
Richard.



More information about the Gcc-patches mailing list