[multiple changes]
2014-10-10 Gary Dismukes <dismukes@adacore.com> * sinfo.ads, gnat_ugn.texi, a-except.adb, a-except-2005.adb, raise-gcc.c Spelling changes (prolog => prologue, epilog => epilogue). 2014-10-10 Ed Schonberg <schonberg@adacore.com> * sem_ch5.adb (Is_Wrapped_In_Block): Handle properly blocks that contain pragmas generated for loop invariants and type predicates. Clarify use of this subprogram. From-SVN: r216087
This commit is contained in:
parent
33b87152da
commit
d6cd5d3493
@ -1,3 +1,14 @@
|
||||
2014-10-10 Gary Dismukes <dismukes@adacore.com>
|
||||
|
||||
* sinfo.ads, gnat_ugn.texi, a-except.adb, a-except-2005.adb,
|
||||
raise-gcc.c Spelling changes (prolog => prologue, epilog => epilogue).
|
||||
|
||||
2014-10-10 Ed Schonberg <schonberg@adacore.com>
|
||||
|
||||
* sem_ch5.adb (Is_Wrapped_In_Block): Handle properly blocks that
|
||||
contain pragmas generated for loop invariants and type predicates.
|
||||
Clarify use of this subprogram.
|
||||
|
||||
2014-10-10 Yannick Moy <moy@adacore.com>
|
||||
|
||||
* sem_prag.adb (Analyze_Global_Item): Accept formal objects in Global
|
||||
|
@ -564,7 +564,7 @@ package body Ada.Exceptions is
|
||||
|
||||
-- None of these procedures ever returns (they raise an exception). By
|
||||
-- using pragma No_Return, we ensure that any junk code after the call,
|
||||
-- such as normal return epilog stuff, can be eliminated).
|
||||
-- such as normal return epilogue stuff, can be eliminated).
|
||||
|
||||
pragma No_Return (Rcheck_CE_Access_Check);
|
||||
pragma No_Return (Rcheck_CE_Null_Access_Parameter);
|
||||
|
@ -513,7 +513,7 @@ package body Ada.Exceptions is
|
||||
|
||||
-- None of these procedures ever returns (they raise an exception). By
|
||||
-- using pragma No_Return, we ensure that any junk code after the call,
|
||||
-- such as normal return epilog stuff, can be eliminated).
|
||||
-- such as normal return epilogue stuff, can be eliminated).
|
||||
|
||||
pragma No_Return (Rcheck_CE_Access_Check);
|
||||
pragma No_Return (Rcheck_CE_Null_Access_Parameter);
|
||||
@ -633,7 +633,7 @@ package body Ada.Exceptions is
|
||||
|
||||
-- None of these procedures ever returns (they raise an exception). By
|
||||
-- using pragma No_Return, we ensure that any junk code after the call,
|
||||
-- such as normal return epilog stuff, can be eliminated).
|
||||
-- such as normal return epilogue stuff, can be eliminated).
|
||||
|
||||
pragma No_Return (Rcheck_00);
|
||||
pragma No_Return (Rcheck_01);
|
||||
|
@ -20890,11 +20890,11 @@ When you use the @code{next} command in a function, the current source
|
||||
location will advance to the next statement as usual. A special case
|
||||
arises in the case of a @code{return} statement.
|
||||
|
||||
Part of the code for a return statement is the ``epilog'' of the function.
|
||||
Part of the code for a return statement is the ``epilogue'' of the function.
|
||||
This is the code that returns to the caller. There is only one copy of
|
||||
this epilog code, and it is typically associated with the last return
|
||||
this epilogue code, and it is typically associated with the last return
|
||||
statement in the function if there is more than one return. In some
|
||||
implementations, this epilog is associated with the first statement
|
||||
implementations, this epilogue is associated with the first statement
|
||||
of the function.
|
||||
|
||||
The result is that if you use the @code{next} command from a return
|
||||
|
@ -6,7 +6,7 @@
|
||||
* *
|
||||
* C Implementation File *
|
||||
* *
|
||||
* Copyright (C) 1992-2013, Free Software Foundation, Inc. *
|
||||
* Copyright (C) 1992-2014, Free Software Foundation, Inc. *
|
||||
* *
|
||||
* GNAT is free software; you can redistribute it and/or modify it under *
|
||||
* terms of the GNU General Public License as published by the Free Soft- *
|
||||
@ -1432,7 +1432,7 @@ __gnat_adjust_context (unsigned char *unw, ULONG64 rsp)
|
||||
{
|
||||
unsigned int len;
|
||||
|
||||
/* Version = 1, no flags, no prolog. */
|
||||
/* Version = 1, no flags, no prologue. */
|
||||
if (unw[0] != 1 || unw[1] != 0)
|
||||
return;
|
||||
len = unw[2];
|
||||
@ -1442,7 +1442,7 @@ __gnat_adjust_context (unsigned char *unw, ULONG64 rsp)
|
||||
unw += 4;
|
||||
while (len > 0)
|
||||
{
|
||||
/* Offset in prolog = 0. */
|
||||
/* Offset in prologue = 0. */
|
||||
if (unw[0] != 0)
|
||||
return;
|
||||
switch (unw[1] & 0xf)
|
||||
|
@ -2855,7 +2855,10 @@ package body Sem_Ch5 is
|
||||
-- container iteration.
|
||||
|
||||
function Is_Wrapped_In_Block (N : Node_Id) return Boolean;
|
||||
-- Determine whether node N is the sole statement of a block
|
||||
-- Determine whether loop statement N has been wrapped in a block to
|
||||
-- capture finalization actions that may be generated for container
|
||||
-- iterators. Prevents infinite recursion when block is analyzed.
|
||||
-- Routine is a noop if loop is single statement within source block.
|
||||
|
||||
---------------------------
|
||||
-- Is_Container_Iterator --
|
||||
@ -2919,14 +2922,27 @@ package body Sem_Ch5 is
|
||||
-------------------------
|
||||
|
||||
function Is_Wrapped_In_Block (N : Node_Id) return Boolean is
|
||||
HSS : constant Node_Id := Parent (N);
|
||||
HSS : Node_Id;
|
||||
Stat : Node_Id;
|
||||
|
||||
begin
|
||||
return
|
||||
Nkind (HSS) = N_Handled_Sequence_Of_Statements
|
||||
and then Nkind (Parent (HSS)) = N_Block_Statement
|
||||
and then First (Statements (HSS)) = N
|
||||
and then No (Next (First (Statements (HSS))));
|
||||
if Ekind (Current_Scope) /= E_Block then
|
||||
return False;
|
||||
|
||||
else
|
||||
HSS :=
|
||||
Handled_Statement_Sequence (Parent (Block_Node (Current_Scope)));
|
||||
|
||||
-- Skip leading pragmas that may be introduced for invariant and
|
||||
-- predicate checks.
|
||||
|
||||
Stat := First (Statements (HSS));
|
||||
while Present (Stat) and then Nkind (Stat) = N_Pragma loop
|
||||
Stat := Next (Stat);
|
||||
end loop;
|
||||
|
||||
return Stat = N and then No (Next (Stat));
|
||||
end if;
|
||||
end Is_Wrapped_In_Block;
|
||||
|
||||
-- Local declarations
|
||||
|
@ -1093,7 +1093,7 @@ package Sinfo is
|
||||
-- Do_Storage_Check (Flag17-Sem)
|
||||
-- This flag is set in an N_Allocator node to indicate that a storage
|
||||
-- check is required for the allocation, or in an N_Subprogram_Body node
|
||||
-- to indicate that a stack check is required in the subprogram prolog.
|
||||
-- to indicate that a stack check is required in the subprogram prologue.
|
||||
-- The N_Allocator case is handled by the routine that expands the call
|
||||
-- to the runtime routine. The N_Subprogram_Body case is handled by the
|
||||
-- backend, and all the semantics does is set the flag.
|
||||
|
Loading…
Reference in New Issue
Block a user