diff options
author | Arnaud Charlet <charlet@gcc.gnu.org> | 2014-01-23 18:03:41 +0100 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2014-01-23 18:03:41 +0100 |
commit | 19992053df788e3280ae25dc272a43e8384b8db1 (patch) | |
tree | f698d9e3c90e8f644532770d9a43ebd40def33db /gcc/ada/sem_util.adb | |
parent | 40f14e9f103d3bcd1216304919b568dd48e471bc (diff) | |
download | gcc-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.adb | 85 |
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 -- --------------------------------- |