exp_ch6.adb (Expand_N_Function_Call): If stack checking is enabled...
2004-10-04 Ed Schonberg <schonberg@gnat.com> * exp_ch6.adb (Expand_N_Function_Call): If stack checking is enabled, do not generate a declaration for a temporary if the call is part of a library-level instantiation. From-SVN: r88495
This commit is contained in:
parent
1c6c6771b6
commit
27ad9660a8
@ -1,3 +1,9 @@
|
|||||||
|
2004-10-04 Ed Schonberg <schonberg@gnat.com>
|
||||||
|
|
||||||
|
* exp_ch6.adb (Expand_N_Function_Call): If stack checking is enabled,
|
||||||
|
do not generate a declaration for a temporary if the call is part of a
|
||||||
|
library-level instantiation.
|
||||||
|
|
||||||
2004-10-04 Ed Schonberg <schonberg@gnat.com>
|
2004-10-04 Ed Schonberg <schonberg@gnat.com>
|
||||||
|
|
||||||
* sem_util.adb (Explain_Limited_Type): Ignore internal components when
|
* sem_util.adb (Explain_Limited_Type): Ignore internal components when
|
||||||
|
@ -2934,6 +2934,12 @@ package body Exp_Ch6 is
|
|||||||
-- this because otherwise gigi may generate a large temporary on the
|
-- this because otherwise gigi may generate a large temporary on the
|
||||||
-- fly and this can cause trouble with stack checking.
|
-- fly and this can cause trouble with stack checking.
|
||||||
|
|
||||||
|
-- This is unecessary if the call is the expression in an object
|
||||||
|
-- declaration, or if it appears outside of any library unit. This
|
||||||
|
-- can only happen if it appears as an actual in a library-level
|
||||||
|
-- instance, in which case a temporary will be generated for it once
|
||||||
|
-- the instance itself is installed.
|
||||||
|
|
||||||
if May_Generate_Large_Temp (Typ)
|
if May_Generate_Large_Temp (Typ)
|
||||||
and then Nkind (Parent (N)) /= N_Assignment_Statement
|
and then Nkind (Parent (N)) /= N_Assignment_Statement
|
||||||
and then
|
and then
|
||||||
@ -2943,6 +2949,7 @@ package body Exp_Ch6 is
|
|||||||
(Nkind (Parent (N)) /= N_Object_Declaration
|
(Nkind (Parent (N)) /= N_Object_Declaration
|
||||||
or else Expression (Parent (N)) /= N)
|
or else Expression (Parent (N)) /= N)
|
||||||
and then not Returned_By_Reference
|
and then not Returned_By_Reference
|
||||||
|
and then Current_Scope /= Standard_Standard
|
||||||
then
|
then
|
||||||
if Stack_Checking_Enabled then
|
if Stack_Checking_Enabled then
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user