mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-23 14:30:53 +08:00
function.c (requires_stack_frame_p): If the function can throw non-call exceptions...
* function.c (requires_stack_frame_p): If the function can throw non-call exceptions, return true if the insn can throw internally. From-SVN: r187429
This commit is contained in:
parent
4ce5754013
commit
4265801ba0
@ -1,3 +1,8 @@
|
||||
2012-05-12 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* function.c (requires_stack_frame_p): If the function can throw
|
||||
non-call exceptions, return true if the insn can throw internally.
|
||||
|
||||
2012-05-12 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
* doc/generic.texi: Rename TYPE_PTRMEM_P to TYPE_PTRDATAMEM_P.
|
||||
|
@ -5316,6 +5316,10 @@ requires_stack_frame_p (rtx insn, HARD_REG_SET prologue_used,
|
||||
if (CALL_P (insn))
|
||||
return !SIBLING_CALL_P (insn);
|
||||
|
||||
/* We need a frame to get the unique CFA expected by the unwinder. */
|
||||
if (cfun->can_throw_non_call_exceptions && can_throw_internal (insn))
|
||||
return true;
|
||||
|
||||
CLEAR_HARD_REG_SET (hardregs);
|
||||
for (df_rec = DF_INSN_DEFS (insn); *df_rec; df_rec++)
|
||||
{
|
||||
|
@ -1,3 +1,7 @@
|
||||
2012-05-12 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gnat.dg/null_pointer_deref3.adb: New test.
|
||||
|
||||
2012-05-12 Tobias Burnus <burnus@net-b.de>
|
||||
|
||||
PR fortran/49110
|
||||
|
24
gcc/testsuite/gnat.dg/null_pointer_deref3.adb
Normal file
24
gcc/testsuite/gnat.dg/null_pointer_deref3.adb
Normal file
@ -0,0 +1,24 @@
|
||||
-- { dg-do run }
|
||||
-- { dg-options "-O -gnatp" }
|
||||
|
||||
-- This test requires architecture- and OS-specific support code for unwinding
|
||||
-- through signal frames (typically located in *-unwind.h) to pass. Feel free
|
||||
-- to disable it if this code hasn't been implemented yet.
|
||||
|
||||
procedure Null_Pointer_Deref3 is
|
||||
|
||||
procedure Leaf is
|
||||
type Int_Ptr is access all Integer;
|
||||
function n return Int_Ptr is
|
||||
begin return null; end;
|
||||
|
||||
Data : Int_Ptr := n;
|
||||
begin
|
||||
Data.all := 0;
|
||||
end;
|
||||
|
||||
begin
|
||||
Leaf;
|
||||
exception
|
||||
when others => null;
|
||||
end;
|
Loading…
Reference in New Issue
Block a user