[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: