[COMMITTED] ada: Add Codepeer Exemption + simplify TO_C code.

Message ID 20221206140126.716950-1-poulhies@adacore.com
State Committed
Commit c690f116b64be820cd47a554bffeadd9907fed2a
Headers
Series [COMMITTED] ada: Add Codepeer Exemption + simplify TO_C code. |

Commit Message

Marc Poulhiès Dec. 6, 2022, 2:01 p.m. UTC
  From: Liaiss Merzougue <merzougue@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(-)
  

Patch

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;