re PR middle-end/38338 (__builtin_apply causes an ICE on x86)
PR middle-end/38338 * builtins.c (expand_builtin_apply_args): Put before parm_birth_insn only if internal_arg_pointer is a non-virtual pseudo. * gcc.dg/pr38338.c: New test. From-SVN: r142480
This commit is contained in:
parent
c187a21f76
commit
1f21b6f4ad
@ -1,3 +1,9 @@
|
||||
2008-12-05 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/38338
|
||||
* builtins.c (expand_builtin_apply_args): Put before parm_birth_insn
|
||||
only if internal_arg_pointer is a non-virtual pseudo.
|
||||
|
||||
2008-12-05 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* config/rs6000/rs6000.md (move_from_CR_gt_bit): Enable for
|
||||
|
@ -1434,9 +1434,15 @@ expand_builtin_apply_args (void)
|
||||
/* Put the insns after the NOTE that starts the function.
|
||||
If this is inside a start_sequence, make the outer-level insn
|
||||
chain current, so the code is placed at the start of the
|
||||
function. */
|
||||
function. If internal_arg_pointer is a non-virtual pseudo,
|
||||
it needs to be placed after the function that initializes
|
||||
that pseudo. */
|
||||
push_topmost_sequence ();
|
||||
emit_insn_before (seq, parm_birth_insn);
|
||||
if (REG_P (crtl->args.internal_arg_pointer)
|
||||
&& REGNO (crtl->args.internal_arg_pointer) > LAST_VIRTUAL_REGISTER)
|
||||
emit_insn_before (seq, parm_birth_insn);
|
||||
else
|
||||
emit_insn_before (seq, NEXT_INSN (entry_of_function ()));
|
||||
pop_topmost_sequence ();
|
||||
return temp;
|
||||
}
|
||||
|
@ -1,3 +1,8 @@
|
||||
2008-12-05 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/38338
|
||||
* gcc.dg/pr38338.c: New test.
|
||||
|
||||
2008-12-05 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* gcc.target/powerpc/20081204-1.c: New test.
|
||||
|
18
gcc/testsuite/gcc.dg/pr38338.c
Normal file
18
gcc/testsuite/gcc.dg/pr38338.c
Normal file
@ -0,0 +1,18 @@
|
||||
/* PR middle-end/38338 */
|
||||
/* { dg-options "-O0" } */
|
||||
/* { dg-options "-O0 -fPIC" { target fpic } } */
|
||||
|
||||
typedef void (*fnp) (void);
|
||||
|
||||
static char
|
||||
foo (char x)
|
||||
{
|
||||
return x;
|
||||
}
|
||||
|
||||
static void *
|
||||
bar (char x)
|
||||
{
|
||||
void *args = __builtin_apply_args ();
|
||||
return __builtin_apply ((fnp) foo, args, sizeof (void *));
|
||||
}
|
Loading…
Reference in New Issue
Block a user