aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/sem_util.adb
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2014-01-23 18:03:41 +0100
committerArnaud Charlet <charlet@gcc.gnu.org>2014-01-23 18:03:41 +0100
commit19992053df788e3280ae25dc272a43e8384b8db1 (patch)
treef698d9e3c90e8f644532770d9a43ebd40def33db /gcc/ada/sem_util.adb
parent40f14e9f103d3bcd1216304919b568dd48e471bc (diff)
downloadgcc-19992053df788e3280ae25dc272a43e8384b8db1.zip
gcc-19992053df788e3280ae25dc272a43e8384b8db1.tar.gz
gcc-19992053df788e3280ae25dc272a43e8384b8db1.tar.bz2
[multiple changes]
2014-01-23 Ed Schonberg <schonberg@adacore.com> * exp_util.adb (Make_Invqriant_Call): If type of expression is a private extension, get invariant from base type. 2014-01-23 Robert Dewar <dewar@adacore.com> * sem_util.adb, sem_attr.adb: Minor reformatting. 2014-01-23 Robert Dewar <dewar@adacore.com> * opt.adb (Save_Opt_Config_Switches): Save SPARK_Mode_Pragma (Restore_Opt_Config_Switches): Restore SPARK_Mode_Pragma. * sem.adb (Semantics): Remove save/restore of SPARK_Mode[_Pragma]. Not needed since already done in Save/Restore_Opt_Config_Switches. 2014-01-23 Robert Dewar <dewar@adacore.com> * gnat_rm.texi, einfo.adb, einfo.ads, sem_prag.adb, gnat_ugn.texi, freeze.adb, repinfo.adb, aspects.adb, aspects.ads, sem_ch13.adb: Linker_Section enhancements. From-SVN: r206992
Diffstat (limited to 'gcc/ada/sem_util.adb')
-rw-r--r--gcc/ada/sem_util.adb85
1 files changed, 43 insertions, 42 deletions
diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb
index a315e5d..be59c9b 100644
--- a/gcc/ada/sem_util.adb
+++ b/gcc/ada/sem_util.adb
@@ -10249,48 +10249,6 @@ package body Sem_Util is
end if;
end Is_Partially_Initialized_Type;
- --------------------------------
- -- Is_Potentially_Unevaluated --
- --------------------------------
-
- function Is_Potentially_Unevaluated (N : Node_Id) return Boolean is
- Par : Node_Id;
- Expr : Node_Id;
-
- begin
- Expr := N;
- Par := Parent (N);
- while not Nkind_In (Par, N_If_Expression,
- N_Case_Expression,
- N_And_Then,
- N_Or_Else,
- N_In,
- N_Not_In)
- loop
- Expr := Par;
- Par := Parent (Par);
- if Nkind (Par) not in N_Subexpr then
- return False;
- end if;
- end loop;
-
- if Nkind (Par) = N_If_Expression then
- return Is_Elsif (Par) or else Expr /= First (Expressions (Par));
-
- elsif Nkind (Par) = N_Case_Expression then
- return Expr /= Expression (Par);
-
- elsif Nkind_In (Par, N_And_Then, N_Or_Else) then
- return Expr = Right_Opnd (Par);
-
- elsif Nkind_In (Par, N_In, N_Not_In) then
- return Expr /= Left_Opnd (Par);
-
- else
- return False;
- end if;
- end Is_Potentially_Unevaluated;
-
------------------------------------
-- Is_Potentially_Persistent_Type --
------------------------------------
@@ -10355,6 +10313,49 @@ package body Sem_Util is
end if;
end Is_Potentially_Persistent_Type;
+ --------------------------------
+ -- Is_Potentially_Unevaluated --
+ --------------------------------
+
+ function Is_Potentially_Unevaluated (N : Node_Id) return Boolean is
+ Par : Node_Id;
+ Expr : Node_Id;
+
+ begin
+ Expr := N;
+ Par := Parent (N);
+ while not Nkind_In (Par, N_If_Expression,
+ N_Case_Expression,
+ N_And_Then,
+ N_Or_Else,
+ N_In,
+ N_Not_In)
+ loop
+ Expr := Par;
+ Par := Parent (Par);
+
+ if Nkind (Par) not in N_Subexpr then
+ return False;
+ end if;
+ end loop;
+
+ if Nkind (Par) = N_If_Expression then
+ return Is_Elsif (Par) or else Expr /= First (Expressions (Par));
+
+ elsif Nkind (Par) = N_Case_Expression then
+ return Expr /= Expression (Par);
+
+ elsif Nkind_In (Par, N_And_Then, N_Or_Else) then
+ return Expr = Right_Opnd (Par);
+
+ elsif Nkind_In (Par, N_In, N_Not_In) then
+ return Expr /= Left_Opnd (Par);
+
+ else
+ return False;
+ end if;
+ end Is_Potentially_Unevaluated;
+
---------------------------------
-- Is_Protected_Self_Reference --
---------------------------------