[COMMITTED] ada: Handle GNATcheck violations
Checks
Commit Message
From: Sheri Bernstein <bernstein@adacore.com>
For the GNATcheck rule "Improper_Returns", either use pragma Annotate
to exempt the violation with the rationale "early returns for performance",
or refactor the code by replacing multiple returns by a single return
statement with a conditional expression; this is more readable and
maintainable, and also conformant with a Highly Recommended design principle
of ISO 26262-6. For the GNATcheck rule "Discriminated_Records", use pragma
Annotate to exempt the violation with the rationale "only variant records
are disallowed".
gcc/ada/
* libgnarl/a-reatim.adb (Time_Of): Add pragma to exempt
Discriminated_Records.
* libgnat/s-imguti.adb (Round, Set_Decimal_Digits): Likewise.
* libgnat/s-multip.adb (Number_Of_CPUs): Likewise.
* libgnarl/s-tpopsp__posix-foreign.adb (Self): Refactor multiple
returns.
Tested on x86_64-pc-linux-gnu, committed on master.
---
gcc/ada/libgnarl/a-reatim.adb | 5 +++++
gcc/ada/libgnarl/s-tpopsp__posix-foreign.adb | 10 ++++------
gcc/ada/libgnat/s-imguti.adb | 10 ++++++++++
gcc/ada/libgnat/s-multip.adb | 5 +++++
4 files changed, 24 insertions(+), 6 deletions(-)
@@ -307,6 +307,9 @@ is
-- Start of processing for Time_Of
begin
+ pragma Annotate (Gnatcheck, Exempt_On, "Improper_Returns",
+ "early returns for performance");
+
-- If SC is so far out of range that there is no possibility of the
-- addition of TS getting it back in range, raise an exception right
-- away. That way we don't have to worry about SC values overflowing.
@@ -356,6 +359,8 @@ is
Out_Of_Range;
end if;
end if;
+
+ pragma Annotate (Gnatcheck, Exempt_Off, "Improper_Returns");
end Time_Of;
-----------------
@@ -95,12 +95,10 @@ package body Specific is
Result := pthread_getspecific (ATCB_Key);
-- If the key value is Null then it is a non-Ada task
-
- if Result /= System.Null_Address then
- return To_Task_Id (Result);
- else
- return Register_Foreign_Thread;
- end if;
+ return
+ (if Result /= System.Null_Address then To_Task_Id (Result)
+ else Register_Foreign_Thread
+ );
end Self;
end Specific;
@@ -119,6 +119,9 @@ package body System.Img_Util is
pragma Assert (Digs'First < Digs'Last);
begin
+ pragma Annotate (Gnatcheck, Exempt_On, "Improper_Returns",
+ "early returns for performance");
+
-- Nothing to do if rounding past the last digit we have
if N >= LD then
@@ -178,6 +181,8 @@ package body System.Img_Util is
Digits_Before_Point := Digits_Before_Point + 1;
end if;
end if;
+
+ pragma Annotate (Gnatcheck, Exempt_Off, "Improper_Returns");
end Round;
---------
@@ -246,6 +251,9 @@ package body System.Img_Util is
-- Start of processing for Set_Decimal_Digits
begin
+ pragma Annotate (Gnatcheck, Exempt_On, "Improper_Returns",
+ "early returns for performance");
+
-- Case of exponent given
if Exp > 0 then
@@ -398,6 +406,8 @@ package body System.Img_Util is
end if;
end if;
end if;
+
+ pragma Annotate (Gnatcheck, Exempt_Off, "Improper_Returns");
end Set_Decimal_Digits;
--------------------------------
@@ -36,6 +36,9 @@ package body System.Multiprocessors is
function Number_Of_CPUs return CPU is
begin
+ pragma Annotate (Gnatcheck, Exempt_On, "Improper_Returns",
+ "early returns for performance");
+
if CPU'Last = 1 then
return 1;
else
@@ -46,6 +49,8 @@ package body System.Multiprocessors is
return CPU (Gnat_Number_Of_CPUs);
end;
end if;
+
+ pragma Annotate (Gnatcheck, Exempt_Off, "Improper_Returns");
end Number_Of_CPUs;
end System.Multiprocessors;