diff options
author | Arnaud Charlet <charlet@gcc.gnu.org> | 2017-09-06 12:01:58 +0200 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2017-09-06 12:01:58 +0200 |
commit | 9fb1e654f463fe3e30dccee2b6622c95edcf5d25 (patch) | |
tree | d3b790355af00b0aa6795455db68661ca27241ea /gcc/ada/exp_ch4.adb | |
parent | 68ec1a494cc8c24b59a99294f86991523cd9832c (diff) | |
download | gcc-9fb1e654f463fe3e30dccee2b6622c95edcf5d25.zip gcc-9fb1e654f463fe3e30dccee2b6622c95edcf5d25.tar.gz gcc-9fb1e654f463fe3e30dccee2b6622c95edcf5d25.tar.bz2 |
[multiple changes]
2017-09-06 Yannick Moy <moy@adacore.com>
* treepr.adb (Print_Entity_Info): Do not print empty Elist.
2017-09-06 Yannick Moy <moy@adacore.com>
* inline.adb (Can_Be_Inlined_In_GNATprove_Mode): Do not consider calls
to subprograms in other units as possibly inlined.
2017-09-06 Ed Schonberg <schonberg@adacore.com>
* freeze.adb (Freeze_Entity): For a derived type that has no
explicit delayed aspects but may inherit delayed aspects from its
parent type, analyze aspect at freeze point for proper capture
of an inherited aspect.
2017-09-06 Arnaud Charlet <charlet@adacore.com>
* lib-xref.adb (Get_Through_Renamings): Get through subprogram
renamings; also, avoid repeated calls to Renamed_Object when getting
through object renamings.
2017-09-06 Ed Schonberg <schonberg@adacore.com>
* sem_ch3.adb (Array_Type_Declaration): Handle properly an
array type declaration in a private part, when an index is a
subtype indication of a discrete type with a private partial view.
2017-09-06 Javier Miranda <miranda@adacore.com>
* exp_ch4.adb (Expand_Modular_Op): Force generating
temporary to improve the generated code.
2017-09-06 Tristan Gingold <gingold@adacore.com>
* s-fatgen.adb: Minor typo fix in comment.
2017-09-06 Ed Schonberg <schonberg@adacore.com>
* exp_ch5.adb (Make_Field_Assign): If the type
of the right-hand side has stored constraint, use its values
(except for those that are renamings of parent discriminants)
to produce additional assignments for the discriminants of the
left-hand side, which are invisible in the righ-hand side and
not retrievable as selected components.
2017-09-06 Ed Schonberg <schonberg@adacore.com>
* sem_util.adb (Needs_One_Formal): The first formal of such a
function must be a controlling formal, so that Obj.F (X, Y)
can have the interpretation F(Obj)(X, Y).
* sem_util.ads: Clarify documentation.
2017-09-06 Eric Botcazou <ebotcazou@adacore.com>
* table.ads, table.adb: Restore original implementation.
* namet.h (Names_Ptr): Adjust back.
(Name_Chars_Ptr): Likewise.
* uintp.h (Uints_Ptr): Likewise.
(Udigits_Ptr): Likewise.
* g-table.ads: Remove pragma Compiler_Unit_Warning.
* par_sco.adb: Do not with GNAT.Table and use Table consistently.
* scos.ads: Replace GNAT.Table with Table and adjust instantiations.
* spark_xrefs.ads: Likewise.
* scos.h: Undo latest changes.
2017-09-06 Ed Schonberg <schonberg@adacore.com>
* sem_ch12.adb (Analyze_Subprogram_Instantiation): Propagate
No_Return flag to instance if pragma applies to generic unit. This
must be done explicitly because the pragma does not appear
directly in the generic declaration (unlike the corresponding
aspect specification).
From-SVN: r251765
Diffstat (limited to 'gcc/ada/exp_ch4.adb')
-rw-r--r-- | gcc/ada/exp_ch4.adb | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb index 7f64cde..9e18ec7 100644 --- a/gcc/ada/exp_ch4.adb +++ b/gcc/ada/exp_ch4.adb @@ -4069,6 +4069,31 @@ package body Exp_Ch4 is Set_Right_Opnd (Op_Expr, Unchecked_Convert_To (Standard_Integer, New_Copy_Tree (Right_Opnd (N)))); + + -- Link this node to the tree to analyze it + + -- If the parent node is an expression with actions we link it + -- to N since otherwise Force_Evaluation cannot identify if this + -- node comes from the Expression and rejects generating the + -- temporary. + + if Nkind (Parent (N)) = N_Expression_With_Actions then + Set_Parent (Op_Expr, N); + + -- Common case + + else + Set_Parent (Op_Expr, Parent (N)); + end if; + + Analyze (Op_Expr); + + -- Force generating a temporary because in the expansion of this + -- expression we may generate code that performs this computation + -- several times. + + Force_Evaluation (Op_Expr, Mode => Strict); + Set_Left_Opnd (Mod_Expr, Op_Expr); end if; |