From: Piotr Trojanek Date: Wed, 27 Oct 2021 08:33:32 +0000 (+0200) Subject: [Ada] Reference in Unbounded_String is almost never null X-Git-Tag: basepoints/gcc-13~3288 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f4665dc4fb511a40a104f1986488861fee8b24f7;p=thirdparty%2Fgcc.git [Ada] Reference in Unbounded_String is almost never null gcc/ada/ * libgnat/a-strunb.adb (Deallocate): Rename Reference_Copy to Old, to make the code similar to other routines in this package. (Realloc_For_Chunk): Use a temporary, deallocate the previous string using a null-allowing copy of the string reference. --- diff --git a/gcc/ada/libgnat/a-strunb.adb b/gcc/ada/libgnat/a-strunb.adb index 0d62e4b379f0..b0e455b9edb3 100644 --- a/gcc/ada/libgnat/a-strunb.adb +++ b/gcc/ada/libgnat/a-strunb.adb @@ -506,11 +506,11 @@ package body Ada.Strings.Unbounded is if Object.Reference /= Null_String'Access then declare - Reference_Copy : String_Access := Object.Reference; + Old : String_Access := Object.Reference; -- The original reference cannot be null, so we must create a -- copy which will become null when deallocated. begin - Deallocate (Reference_Copy); + Deallocate (Old); Object.Reference := Null_Unbounded_String.Reference; end; Object.Last := 0; @@ -833,9 +833,13 @@ package body Ada.Strings.Unbounded is Tmp : constant String_Access := new String (1 .. New_Rounded_Up_Size); + Old : String_Access := Source.Reference; + -- The original reference cannot be null, so we must create a copy + -- which will become null when deallocated. + begin Tmp (1 .. Source.Last) := Source.Reference (1 .. Source.Last); - Free (Source.Reference); + Free (Old); Source.Reference := Tmp; end; end if;