From: Liaiss Merzougue <merzou...@adacore.com>

This patch simplify the TO_C code to have a single branch for
raising exception. Furthermore, adding pragma annotate for codepeer
to ignore uninitialized value since this is caused because we have
input check before the initialization.

gcc/ada/

        * libgnat/i-c.adb (To_C): Simplify code for having a single
        exception raise. Add pragma annotate about uninitialized value
        which happen only on exception raising.

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

---
 gcc/ada/libgnat/i-c.adb | 15 ++++++---------
 1 file changed, 6 insertions(+), 9 deletions(-)

diff --git a/gcc/ada/libgnat/i-c.adb b/gcc/ada/libgnat/i-c.adb
index 4b50d18a5a1..28660219b6e 100644
--- a/gcc/ada/libgnat/i-c.adb
+++ b/gcc/ada/libgnat/i-c.adb
@@ -186,7 +186,7 @@ is
      (Item     : char_array;
       Trim_Nul : Boolean := True) return String
    is
-      Count : Natural;
+      Count : Natural := 0;
       From  : size_t;
 
    begin
@@ -1177,7 +1177,7 @@ is
       To : size_t;
 
    begin
-      if Target'Length < Item'Length then
+      if Target'Length < Item'Length + (if Append_Nul then 1 else 0) then
          raise Constraint_Error;
 
       else
@@ -1210,17 +1210,14 @@ is
                      Target'First + (Item'Length - 1))'Initialized);
 
          if Append_Nul then
-            if To > Target'Last then
-               raise Constraint_Error;
-            else
-               Target (To) := char32_nul;
-               Count := Item'Length + 1;
-            end if;
-
+            Target (To) := char32_nul;
+            Count := Item'Length + 1;
          else
             Count := Item'Length;
          end if;
       end if;
    end To_C;
+   pragma Annotate (CodePeer, False_Positive, "validity check",
+     "Count is only uninitialized on abnormal return.");
 
 end Interfaces.C;
-- 
2.34.1

Reply via email to