stmt.c (expand_return): Call start_cleanup_deferral and end_cleanup_deferral around conditional code.
* stmt.c (expand_return): Call start_cleanup_deferral and end_cleanup_deferral around conditional code. From-SVN: r27018
This commit is contained in:
parent
5458582593
commit
1483bddbc8
|
@ -1,3 +1,8 @@
|
||||||
|
Wed May 19 03:56:56 1999 Mark Mitchell <mark@codesourcery.com>
|
||||||
|
|
||||||
|
* stmt.c (expand_return): Call start_cleanup_deferral and
|
||||||
|
end_cleanup_deferral around conditional code.
|
||||||
|
|
||||||
Wed May 19 03:10:08 1999 Bruce Korb <ddsinc09@ix.netcom.com>
|
Wed May 19 03:10:08 1999 Bruce Korb <ddsinc09@ix.netcom.com>
|
||||||
|
|
||||||
* fixinc/fixincl.tpl: Avoid depending on ANSI C features for
|
* fixinc/fixincl.tpl: Avoid depending on ANSI C features for
|
||||||
|
|
|
@ -2703,6 +2703,7 @@ expand_return (retval)
|
||||||
tree expr;
|
tree expr;
|
||||||
|
|
||||||
do_jump (TREE_OPERAND (retval_rhs, 0), label, NULL_RTX);
|
do_jump (TREE_OPERAND (retval_rhs, 0), label, NULL_RTX);
|
||||||
|
start_cleanup_deferral ();
|
||||||
expr = build (MODIFY_EXPR, TREE_TYPE (TREE_TYPE (current_function_decl)),
|
expr = build (MODIFY_EXPR, TREE_TYPE (TREE_TYPE (current_function_decl)),
|
||||||
DECL_RESULT (current_function_decl),
|
DECL_RESULT (current_function_decl),
|
||||||
TREE_OPERAND (retval_rhs, 1));
|
TREE_OPERAND (retval_rhs, 1));
|
||||||
|
@ -2715,6 +2716,7 @@ expand_return (retval)
|
||||||
TREE_OPERAND (retval_rhs, 2));
|
TREE_OPERAND (retval_rhs, 2));
|
||||||
TREE_SIDE_EFFECTS (expr) = 1;
|
TREE_SIDE_EFFECTS (expr) = 1;
|
||||||
expand_return (expr);
|
expand_return (expr);
|
||||||
|
end_cleanup_deferral ();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
// Origin: Bryan Scattergood <bryan@fsel.com>
|
||||||
|
// Special g++ Options: -O -fno-exceptions
|
||||||
|
|
||||||
|
extern "C" void abort();
|
||||||
|
|
||||||
|
class A
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
A();
|
||||||
|
~A();
|
||||||
|
int foo();
|
||||||
|
};
|
||||||
|
|
||||||
|
A::A() {}
|
||||||
|
A::~A() { abort (); }
|
||||||
|
int A::foo() {}
|
||||||
|
|
||||||
|
extern int f()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
return ((f() != 0) ? A().foo() : 0);
|
||||||
|
}
|
Loading…
Reference in New Issue