aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/exp_ch4.adb
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2014-07-29 14:44:34 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2014-07-29 14:44:34 +0200
commit414c65636fdd1503b2134da24a49bb8a3ab57ee3 (patch)
tree5b63d111086fa3f1a33066a40b49275d1befa3a0 /gcc/ada/exp_ch4.adb
parent0382062b3b87859411e98bb2d3347020e7f45f48 (diff)
downloadgcc-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.adb20
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.