aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/exp_ch13.adb
diff options
context:
space:
mode:
authorPiotr Trojanek <trojanek@adacore.com>2022-05-20 09:41:30 +0200
committerPierre-Marie de Rodat <derodat@adacore.com>2022-06-02 09:06:45 +0000
commitb05a31e579ec2e46c46c4b3f36fffdf0e959bd1f (patch)
treefccac0415278884fdcc26f23e557960b669f4d79 /gcc/ada/exp_ch13.adb
parent89e037d0e36654e84823c47980ef19dc0f77b8ce (diff)
downloadgcc-b05a31e579ec2e46c46c4b3f36fffdf0e959bd1f.zip
gcc-b05a31e579ec2e46c46c4b3f36fffdf0e959bd1f.tar.gz
gcc-b05a31e579ec2e46c46c4b3f36fffdf0e959bd1f.tar.bz2
[Ada] Remove redundant checks for missing lists
When iterating over list elements with First/Next there is no need to check if the list is present, because First intentionally returns Empty if list is not present and the condition of subsequent loop will not be satisfied. Code cleanup; semantics is unaffected. Occurrences of the redundant pattern were found with: $ grep First -B 3 | less and examining the output for the calls to Present. gcc/ada/ * exp_ch13.adb, exp_ch5.adb, exp_ch9.adb, exp_strm.adb, sem_ch10.adb, sem_ch13.adb, sem_ch5.adb, sem_ch6.adb, sem_ch8.adb, sem_elab.adb, sem_eval.adb, sem_prag.adb, sem_util.adb: Remove checks for the missing list before iterating with First/Next; reindent code and refill comments.
Diffstat (limited to 'gcc/ada/exp_ch13.adb')
-rw-r--r--gcc/ada/exp_ch13.adb92
1 files changed, 45 insertions, 47 deletions
diff --git a/gcc/ada/exp_ch13.adb b/gcc/ada/exp_ch13.adb
index d2be185..444f752 100644
--- a/gcc/ada/exp_ch13.adb
+++ b/gcc/ada/exp_ch13.adb
@@ -631,58 +631,56 @@ package body Exp_Ch13 is
-- assignments, and wrappers may need checks. Other freezing actions
-- should be compiled with all checks off.
- if Present (Actions (N)) then
- Decl := First (Actions (N));
- while Present (Decl) loop
- if Nkind (Decl) = N_Subprogram_Body
- and then (Is_Init_Proc (Defining_Entity (Decl))
- or else
- Chars (Defining_Entity (Decl)) = Name_uAssign
- or else
- (Present (Corresponding_Spec (Decl))
- and then Is_Wrapper
- (Corresponding_Spec (Decl))))
- then
- Analyze (Decl);
+ Decl := First (Actions (N));
+ while Present (Decl) loop
+ if Nkind (Decl) = N_Subprogram_Body
+ and then (Is_Init_Proc (Defining_Entity (Decl))
+ or else
+ Chars (Defining_Entity (Decl)) = Name_uAssign
+ or else
+ (Present (Corresponding_Spec (Decl))
+ and then Is_Wrapper
+ (Corresponding_Spec (Decl))))
+ then
+ Analyze (Decl);
- -- A subprogram body created for a renaming_as_body completes
- -- a previous declaration, which may be in a different scope.
- -- Establish the proper scope before analysis.
+ -- A subprogram body created for a renaming_as_body completes
+ -- a previous declaration, which may be in a different scope.
+ -- Establish the proper scope before analysis.
- elsif Nkind (Decl) = N_Subprogram_Body
- and then Present (Corresponding_Spec (Decl))
- and then Scope (Corresponding_Spec (Decl)) /= Current_Scope
- then
- Push_Scope (Scope (Corresponding_Spec (Decl)));
- Analyze (Decl, Suppress => All_Checks);
- Pop_Scope;
-
- -- We treat generated equality specially, if validity checks are
- -- enabled, in order to detect components default-initialized
- -- with invalid values.
-
- elsif Nkind (Decl) = N_Subprogram_Body
- and then Chars (Defining_Entity (Decl)) = Name_Op_Eq
- and then Validity_Checks_On
- and then Initialize_Scalars
- then
- declare
- Save_Force : constant Boolean := Force_Validity_Checks;
- begin
- Force_Validity_Checks := True;
- Analyze (Decl);
- Force_Validity_Checks := Save_Force;
- end;
+ elsif Nkind (Decl) = N_Subprogram_Body
+ and then Present (Corresponding_Spec (Decl))
+ and then Scope (Corresponding_Spec (Decl)) /= Current_Scope
+ then
+ Push_Scope (Scope (Corresponding_Spec (Decl)));
+ Analyze (Decl, Suppress => All_Checks);
+ Pop_Scope;
+
+ -- We treat generated equality specially, if validity checks are
+ -- enabled, in order to detect components default-initialized with
+ -- invalid values.
+
+ elsif Nkind (Decl) = N_Subprogram_Body
+ and then Chars (Defining_Entity (Decl)) = Name_Op_Eq
+ and then Validity_Checks_On
+ and then Initialize_Scalars
+ then
+ declare
+ Save_Force : constant Boolean := Force_Validity_Checks;
+ begin
+ Force_Validity_Checks := True;
+ Analyze (Decl);
+ Force_Validity_Checks := Save_Force;
+ end;
- -- All other freezing actions
+ -- All other freezing actions
- else
- Analyze (Decl, Suppress => All_Checks);
- end if;
+ else
+ Analyze (Decl, Suppress => All_Checks);
+ end if;
- Next (Decl);
- end loop;
- end if;
+ Next (Decl);
+ end loop;
-- If we are to delete this N_Freeze_Entity, do so by rewriting so that
-- a loop on all nodes being inserted will work propertly.