From: Piotr Trojanek <troja...@adacore.com> Array assignments are likely more efficient than element-by-element copying; in particular, they avoid constraints checks in every iteration of a loop (when the runtime is compiled with checks enabled).
A cleanup and improvement opportunity spotted while working on improved detection of uninitialised local scalar objects. gcc/ada/ * libgnat/g-dirope.adb (Read): Use null-excluding, access-to-constant type; replace element-by-element copy with array assignments. Tested on x86_64-pc-linux-gnu, committed on master. --- gcc/ada/libgnat/g-dirope.adb | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/gcc/ada/libgnat/g-dirope.adb b/gcc/ada/libgnat/g-dirope.adb index c23aa68b700..428d27d9e8d 100644 --- a/gcc/ada/libgnat/g-dirope.adb +++ b/gcc/ada/libgnat/g-dirope.adb @@ -676,13 +676,9 @@ package body GNAT.Directory_Operations is return; end if; - Last := - (if Str'Length > Filename_Len then Str'First + Filename_Len - 1 - else Str'Last); - declare subtype Path_String is String (1 .. Filename_Len); - type Path_String_Access is access Path_String; + type Path_String_Access is not null access constant Path_String; function Address_To_Access is new Ada.Unchecked_Conversion @@ -693,9 +689,13 @@ package body GNAT.Directory_Operations is Address_To_Access (Filename_Addr); begin - for J in Str'First .. Last loop - Str (J) := Path_Access (J - Str'First + 1); - end loop; + if Str'Length > Filename_Len then + Last := Str'First + Filename_Len - 1; + Str (Str'First .. Last) := Path_Access.all; + else + Last := Str'Last; + Str := Path_Access (1 .. Str'Length); + end if; end; end Read; -- 2.43.2