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?

Thanks,
- Tom

2015-02-17  Tom de Vries  <t...@codesourcery.com>

	* fold-const.c (operand_equal_p): Handle INTERNAL_FNs.
---
 gcc/fold-const.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 8377120..fbf76d0 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -3032,6 +3032,11 @@ operand_equal_p (const_tree arg0, const_tree arg1, unsigned int flags)
       switch (TREE_CODE (arg0))
 	{
 	case CALL_EXPR:
+	  /* Handle internal_fns conservatively.  */
+	  if (CALL_EXPR_FN (arg0) == NULL_TREE
+	      || CALL_EXPR_FN (arg1) == NULL_TREE)
+	    return 0;
+
 	  /* 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),
-- 
1.9.1

Reply via email to