[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[Bug bootstrap/40788] [4.5 regression] ICE on sparc: tree check: expected class 'expression', have 'declaration' (var_decl) in gimplify_va_arg_expr, at builtins.c:5107




------- Comment #5 from laurent at guerby dot net  2009-08-10 08:01 -------
The search is not finished but it's likely the following patch:

2009-07-17  Aldy Hernandez  <aldyh@redhat.com>
           Manuel López-Ibáñez  <manu@gcc.gnu.org>

       PR 40435
  ... builtins.c ... Add location argument to ...



The ICE happens here:

builtins.c:
      *expr_p = targetm.gimplify_va_arg_expr (valist, type, pre_p, post_p);
      SET_EXPR_LOCATION (*expr_p, loc);

While compiling the following code:

genattrtab.c:
      HOST_WIDE_INT arg0 = va_arg (p, HOST_WIDE_INT);

Note the HOST_WIDE_INT here. And sparc_gimplify_va_arg_expr does something
special in one case, tagged FIXME:

sparc.c:
  /* If the address isn't aligned properly for the type, we need a temporary.
     FIXME: This is inefficient, usually we can do this in registers.  */
  else if (align == 0 && TYPE_ALIGN (type) > BITS_PER_WORD)
    {
      tree tmp = create_tmp_var (type, "va_arg_tmp");
      tree dest_addr = build_fold_addr_expr (tmp);
      tree copy = build_call_expr (implicit_built_in_decls[BUILT_IN_MEMCPY],
                                   3, dest_addr, addr, size_int (rsize));
      TREE_ADDRESSABLE (tmp) = 1;
      gimplify_and_add (copy, pre_p);
      addr = dest_addr;
    }

This is guessing because I don't understand all that stuff so help welcomed :).


-- 

laurent at guerby dot net changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |manu at gcc dot gnu dot org,
                   |                            |aldyh at redhat dot com


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40788

------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.


Reply to: