From f4665dc4fb511a40a104f1986488861fee8b24f7 Mon Sep 17 00:00:00 2001 From: Piotr Trojanek Date: Wed, 27 Oct 2021 10:33:32 +0200 Subject: [PATCH] [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. --- gcc/ada/libgnat/a-strunb.adb | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) 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; -- 2.47.2