public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [COMMITTED] ada: Tweak internal subprogram in Ada.Directories
@ 2023-10-10 12:14 Marc Poulhiès
  0 siblings, 0 replies; only message in thread
From: Marc Poulhiès @ 2023-10-10 12:14 UTC (permalink / raw)
  To: gcc-patches; +Cc: Ronan Desplanques

From: Ronan Desplanques <desplanques@adacore.com>

The purpose of this patch is to work around false-positive warnings
emitted by GNAT SAS (also known as CodePeer). It does not change
the behavior of the modified subprogram.

gcc/ada/

	* libgnat/a-direct.adb (Start_Search_Internal): Tweak subprogram
	body.

Tested on x86_64-pc-linux-gnu, committed on master.

---
 gcc/ada/libgnat/a-direct.adb | 46 ++++++++++++++++++++----------------
 1 file changed, 25 insertions(+), 21 deletions(-)

diff --git a/gcc/ada/libgnat/a-direct.adb b/gcc/ada/libgnat/a-direct.adb
index f7a1d5dfd6d..594971c6021 100644
--- a/gcc/ada/libgnat/a-direct.adb
+++ b/gcc/ada/libgnat/a-direct.adb
@@ -1379,13 +1379,21 @@ package body Ada.Directories is
                              Compose (Directory, File_Name) & ASCII.NUL;
                   Path   : String renames
                              Path_C (Path_C'First .. Path_C'Last - 1);
-                  Found  : Boolean := False;
                   Attr   : aliased File_Attributes;
                   Exists : Integer;
                   Error  : Integer;
-                  Kind   : File_Kind;
-                  Size   : File_Size;
 
+                  type Result (Found : Boolean := False) is record
+                     case Found is
+                        when True =>
+                           Kind : File_Kind;
+                           Size : File_Size;
+                        when False =>
+                           null;
+                     end case;
+                  end record;
+
+                  Res : Result := (Found => False);
                begin
                   --  Get the file attributes for the directory item
 
@@ -1416,32 +1424,28 @@ package body Ada.Directories is
                      if Is_Regular_File_Attr (Path_C'Address, Attr'Access) = 1
                      then
                         if Filter (Ordinary_File) then
-                           Found := True;
-                           Kind := Ordinary_File;
-                           Size :=
-                             File_Size
-                               (File_Length_Attr
-                                  (-1, Path_C'Address, Attr'Access));
+                           Res := (Found => True,
+                                   Kind => Ordinary_File,
+                                   Size => File_Size
+                                     (File_Length_Attr
+                                        (-1, Path_C'Address, Attr'Access)));
 
                         end if;
                      elsif Is_Directory_Attr (Path_C'Address, Attr'Access) = 1
                      then
                         if Filter (File_Kind'First) then
-                           Found := True;
-                           Kind := File_Kind'First;
-                           --  File_Kind'First is used instead of Directory due
-                           --  to a name overload issue with the procedure
-                           --  parameter Directory.
-                           Size := 0;
+                           Res := (Found => True,
+                                   Kind => File_Kind'First,
+                                   Size => 0);
                         end if;
 
                      elsif Filter (Special_File) then
-                        Found := True;
-                        Kind := Special_File;
-                        Size := 0;
+                        Res := (Found => True,
+                                Kind => Special_File,
+                                Size => 0);
                      end if;
 
-                     if Found then
+                     if Res.Found then
                         Search.State.Dir_Contents.Append
                           (Directory_Entry_Type'
                              (Valid             => True,
@@ -1449,9 +1453,9 @@ package body Ada.Directories is
                                 To_Unbounded_String (File_Name),
                               Full_Name         => To_Unbounded_String (Path),
                               Attr_Error_Code   => 0,
-                              Kind              => Kind,
+                              Kind              => Res.Kind,
                               Modification_Time => Modification_Time (Path),
-                              Size              => Size));
+                              Size              => Res.Size));
                      end if;
                   end if;
                end;
-- 
2.42.0


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-10-10 12:15 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-10-10 12:14 [COMMITTED] ada: Tweak internal subprogram in Ada.Directories Marc Poulhiès

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).