diff options
author | Arnaud Charlet <charlet@gcc.gnu.org> | 2014-07-29 14:44:34 +0200 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2014-07-29 14:44:34 +0200 |
commit | 414c65636fdd1503b2134da24a49bb8a3ab57ee3 (patch) | |
tree | 5b63d111086fa3f1a33066a40b49275d1befa3a0 /gcc/ada/exp_ch4.adb | |
parent | 0382062b3b87859411e98bb2d3347020e7f45f48 (diff) | |
download | gcc-414c65636fdd1503b2134da24a49bb8a3ab57ee3.zip gcc-414c65636fdd1503b2134da24a49bb8a3ab57ee3.tar.gz gcc-414c65636fdd1503b2134da24a49bb8a3ab57ee3.tar.bz2 |
[multiple changes]
2014-07-29 Thomas Quinot <quinot@adacore.com>
* errout.adb (Set_Error_Posted): When propagating flag to
an enclosing named association, also propagate to the parent
of that node, so that named and positional associations are
treated consistently.
2014-07-29 Ed Schonberg <schonberg@adacore.com>
* sem_attr.adb (Resolve_Attribute, case 'Update): Set
Do_Range_Check properly on array component expressions that
have a scalar type. In GNATprove mode, only checks on scalar
components must be marked by the front-end.
2014-07-29 Ed Schonberg <schonberg@adacore.com>
* sem_res.adb (Resolve_Type_Conversion): If the type of the
expression is a limited view, use the non-limited view when
available.
2014-07-29 Hristian Kirtchev <kirtchev@adacore.com>
* exp_ch4.adb (Expand_N_Case_Expression): Mark the generated
case statement as coming from a conditional expression.
(Expand_N_If_Expression): Mark the generated if statement as
coming from a conditional expression.
* exp_ch5.adb (Expand_N_Case_Statement): Do not process controlled
objects found in case statement alternatives when the case
statement is actually a case expression.
(Expand_N_If_Statement):
Do not process controlled objects found in an if statement when
the if statement is actually an if expression.
* sinfo.adb (From_Conditional_Expression): New routine.
(Set_From_Conditional_Expression): New routine.
* sinfo.ads Add new semantic flag From_Conditional_Expression and
update related nodes.
(From_Conditional_Expression): New routine along with pragma Inline.
(Set_From_Conditional_Expression): New routine along with pragma Inline.
From-SVN: r213156
Diffstat (limited to 'gcc/ada/exp_ch4.adb')
-rw-r--r-- | gcc/ada/exp_ch4.adb | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb index adf8dfc..9abe25a 100644 --- a/gcc/ada/exp_ch4.adb +++ b/gcc/ada/exp_ch4.adb @@ -4991,6 +4991,13 @@ package body Exp_Ch4 is Expression => Expression (N), Alternatives => New_List); + -- Preserve the original context for which the case statement is being + -- generated. This is needed by the finalization machinery to prevent + -- the premature finalization of controlled objects found within the + -- case statement. + + Set_From_Conditional_Expression (Cstmt); + Actions := New_List; -- Scalar case @@ -5354,9 +5361,16 @@ package body Exp_Ch4 is Prefix => Relocate_Node (Elsex), Attribute_Name => Name_Unrestricted_Access)))); - New_N := - Make_Explicit_Dereference (Loc, - Prefix => New_Occurrence_Of (Cnn, Loc)); + -- Preserve the original context for which the if statement is being + -- generated. This is needed by the finalization machinery to prevent + -- the premature finalization of controlled objects found within the + -- if statement. + + Set_From_Conditional_Expression (New_If); + + New_N := + Make_Explicit_Dereference (Loc, + Prefix => New_Occurrence_Of (Cnn, Loc)); -- For other types, we only need to expand if there are other actions -- associated with either branch. |