calls.c (expand_call): If sibcall_failure is set during pass 1, clear tail_call_insns as well.
* calls.c (expand_call): If sibcall_failure is set during pass 1, clear tail_call_insns as well. * g++.old-deja/g++.other/eh2.C: New test. From-SVN: r37087
This commit is contained in:
parent
254bb25636
commit
fadb729c6d
@ -1,3 +1,8 @@
|
||||
2000-10-27 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* calls.c (expand_call): If sibcall_failure is set during pass 1,
|
||||
clear tail_call_insns as well.
|
||||
|
||||
2000-10-27 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* config/arm/arm-protos.h (arm_function_ok_for_sibcall): Add
|
||||
|
@ -3363,10 +3363,6 @@ expand_call (exp, target, ignore)
|
||||
{
|
||||
tail_call_insns = insns;
|
||||
|
||||
/* If something prevents making this a sibling call,
|
||||
zero out the sequence. */
|
||||
if (sibcall_failure)
|
||||
tail_call_insns = NULL_RTX;
|
||||
/* Restore the pending stack adjustment now that we have
|
||||
finished generating the sibling call sequence. */
|
||||
|
||||
@ -3385,6 +3381,11 @@ expand_call (exp, target, ignore)
|
||||
}
|
||||
else
|
||||
normal_call_insns = insns;
|
||||
|
||||
/* If something prevents making this a sibling call,
|
||||
zero out the sequence. */
|
||||
if (sibcall_failure)
|
||||
tail_call_insns = NULL_RTX;
|
||||
}
|
||||
|
||||
/* The function optimize_sibling_and_tail_recursive_calls doesn't
|
||||
|
@ -1,3 +1,7 @@
|
||||
2000-10-27 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* g++.old-deja/g++.other/eh2.C: New test.
|
||||
|
||||
2000-10-27 Bernd Schmidt <bernds@cygnus.co.uk>
|
||||
|
||||
* gcc.c-torture/execute/20001027-1.c: New test.
|
||||
|
18
gcc/testsuite/g++.old-deja/g++.other/eh2.C
Normal file
18
gcc/testsuite/g++.old-deja/g++.other/eh2.C
Normal file
@ -0,0 +1,18 @@
|
||||
// Build don't link:
|
||||
// Origin: Jakub Jelinek <jakub@redhat.com>
|
||||
// Special g++ Options: -O2
|
||||
|
||||
class a {
|
||||
public:
|
||||
double b;
|
||||
int c;
|
||||
~a() { }
|
||||
};
|
||||
|
||||
int bar(a x);
|
||||
a foo(double x);
|
||||
|
||||
int baz(double x, int y)
|
||||
{
|
||||
return bar(foo(x));
|
||||
}
|
Loading…
Reference in New Issue
Block a user