This moves the declaration of Value_Enumeration_Pos to the body, renames
Valid_Enumeration_Value into Valid_Value_Enumeration and eliminates the
need for a range check on the return path of Value_Enumeration.

Tested on x86_64-pc-linux-gnu, committed on trunk

gcc/ada/

        * rtsfind.ads (RE_Id): Change RE_Valid_Enumeration_Value_NN into
        RE_Valid_Value_Enumeration_NN.
        (RE_Unit_Table): Adjust to above renaming.
        * exp_imgv.adb (Expand_Valid_Value_Attribute): Likewise.
        * libgnat/s-valuen.ads (Invalid): Remove.
        (Value_Enumeration_Pos): Move to...
        * libgnat/s-valuen.adb (Value_Enumeration_Pos): ...here.
        Return -1 instead of Invalid.
        (Value_Enumeration): Compare against 0 instead of Invalid.
        (Valid_Enumeration_Value): Likewise.  Rename to...
        (Valid_Value_Enumeration): ...this.
        * libgnat/s-vaenu8.ads (Valid_Enumeration_Value_8): Rename into...
        (Valid_Value_Enumeration_8): ...this.
        * libgnat/s-vaen16.ads (Valid_Enumeration_Value_16): Rename into...
        (Valid_Value_Enumeration_16): ...this.
        * libgnat/s-vaen32.ads (Valid_Enumeration_Value_32): Rename into...
        (Valid_Value_Enumeration_32): ...this.
diff --git a/gcc/ada/exp_imgv.adb b/gcc/ada/exp_imgv.adb
--- a/gcc/ada/exp_imgv.adb
+++ b/gcc/ada/exp_imgv.adb
@@ -1439,17 +1439,17 @@ package body Exp_Imgv is
    begin
       --  Generate:
 
-      --     Valid_Enumeration_Value _NN
+      --     Valid_Value_Enumeration_NN
       --       (typS, typN'Address, typH'Unrestricted_Access, Num, X)
 
       Ttyp := Component_Type (Etype (Lit_Indexes (Rtyp)));
 
       if Ttyp = Standard_Integer_8 then
-         Func := RE_Valid_Enumeration_Value_8;
+         Func := RE_Valid_Value_Enumeration_8;
       elsif Ttyp = Standard_Integer_16 then
-         Func := RE_Valid_Enumeration_Value_16;
+         Func := RE_Valid_Value_Enumeration_16;
       else
-         Func := RE_Valid_Enumeration_Value_32;
+         Func := RE_Valid_Value_Enumeration_32;
       end if;
 
       Prepend_To (Args,


diff --git a/gcc/ada/libgnat/s-vaen16.ads b/gcc/ada/libgnat/s-vaen16.ads
--- a/gcc/ada/libgnat/s-vaen16.ads
+++ b/gcc/ada/libgnat/s-vaen16.ads
@@ -49,13 +49,13 @@ package System.Val_Enum_16 is
       return    Natural
      renames Impl.Value_Enumeration;
 
-   function Valid_Enumeration_Value_16
+   function Valid_Value_Enumeration_16
      (Names   : String;
       Indexes : System.Address;
       Hash    : Impl.Hash_Function_Ptr;
       Num     : Natural;
       Str     : String)
       return    Boolean
-     renames Impl.Valid_Enumeration_Value;
+     renames Impl.Valid_Value_Enumeration;
 
 end System.Val_Enum_16;


diff --git a/gcc/ada/libgnat/s-vaen32.ads b/gcc/ada/libgnat/s-vaen32.ads
--- a/gcc/ada/libgnat/s-vaen32.ads
+++ b/gcc/ada/libgnat/s-vaen32.ads
@@ -49,13 +49,13 @@ package System.Val_Enum_32 is
       return    Natural
      renames Impl.Value_Enumeration;
 
-   function Valid_Enumeration_Value_32
+   function Valid_Value_Enumeration_32
      (Names   : String;
       Indexes : System.Address;
       Hash    : Impl.Hash_Function_Ptr;
       Num     : Natural;
       Str     : String)
       return    Boolean
-     renames Impl.Valid_Enumeration_Value;
+     renames Impl.Valid_Value_Enumeration;
 
 end System.Val_Enum_32;


diff --git a/gcc/ada/libgnat/s-vaenu8.ads b/gcc/ada/libgnat/s-vaenu8.ads
--- a/gcc/ada/libgnat/s-vaenu8.ads
+++ b/gcc/ada/libgnat/s-vaenu8.ads
@@ -49,13 +49,13 @@ package System.Val_Enum_8 is
       return    Natural
      renames Impl.Value_Enumeration;
 
-   function Valid_Enumeration_Value_8
+   function Valid_Value_Enumeration_8
      (Names   : String;
       Indexes : System.Address;
       Hash    : Impl.Hash_Function_Ptr;
       Num     : Natural;
       Str     : String)
       return    Boolean
-     renames Impl.Valid_Enumeration_Value;
+     renames Impl.Valid_Value_Enumeration;
 
 end System.Val_Enum_8;


diff --git a/gcc/ada/libgnat/s-valuen.adb b/gcc/ada/libgnat/s-valuen.adb
--- a/gcc/ada/libgnat/s-valuen.adb
+++ b/gcc/ada/libgnat/s-valuen.adb
@@ -35,6 +35,16 @@ with System.Val_Util; use System.Val_Util;
 
 package body System.Value_N is
 
+   function Value_Enumeration_Pos
+     (Names   : String;
+      Indexes : System.Address;
+      Hash    : Hash_Function_Ptr;
+      Num     : Natural;
+      Str     : String)
+      return    Integer with Pure_Function;
+   --  Same as Value_Enumeration, except returns negative if Value_Enumeration
+   --  would raise Constraint_Error.
+
    ---------------------------
    -- Value_Enumeration_Pos --
    ---------------------------
@@ -98,9 +108,25 @@ package body System.Value_N is
          end if;
       end;
 
-      return Invalid;
+      return -1;
    end Value_Enumeration_Pos;
 
+   -----------------------------
+   -- Valid_Value_Enumeration --
+   -----------------------------
+
+   function Valid_Value_Enumeration
+     (Names   : String;
+      Indexes : System.Address;
+      Hash    : Hash_Function_Ptr;
+      Num     : Natural;
+      Str     : String)
+      return    Boolean
+   is
+   begin
+      return Value_Enumeration_Pos (Names, Indexes, Hash, Num, Str) >= 0;
+   end Valid_Value_Enumeration;
+
    -----------------------
    -- Value_Enumeration --
    -----------------------
@@ -115,28 +141,15 @@ package body System.Value_N is
    is
       Result : constant Integer :=
         Value_Enumeration_Pos (Names, Indexes, Hash, Num, Str);
+
    begin
-      if Result = Invalid then
+      --  The comparison eliminates the need for a range check on return
+
+      if Result < 0 then
          Bad_Value (Str);
       else
          return Result;
       end if;
    end Value_Enumeration;
 
-   -----------------------------
-   -- Valid_Enumeration_Value --
-   -----------------------------
-
-   function Valid_Enumeration_Value
-     (Names   : String;
-      Indexes : System.Address;
-      Hash    : Hash_Function_Ptr;
-      Num     : Natural;
-      Str     : String)
-      return    Boolean
-   is
-   begin
-      return Value_Enumeration_Pos (Names, Indexes, Hash, Num, Str) /= Invalid;
-   end Valid_Enumeration_Value;
-
 end System.Value_N;


diff --git a/gcc/ada/libgnat/s-valuen.ads b/gcc/ada/libgnat/s-valuen.ads
--- a/gcc/ada/libgnat/s-valuen.ads
+++ b/gcc/ada/libgnat/s-valuen.ads
@@ -67,7 +67,7 @@ package System.Value_N is
    --  If the image is found in Names, then the corresponding Pos value is
    --  returned. If not, Constraint_Error is raised.
 
-   function Valid_Enumeration_Value
+   function Valid_Value_Enumeration
      (Names   : String;
       Indexes : System.Address;
       Hash    : Hash_Function_Ptr;
@@ -79,16 +79,4 @@ package System.Value_N is
    --  raise Constraint_Error. The parameters have the same meaning as for
    --  Value_Enumeration.
 
-   Invalid : constant Integer := -1;
-
-   function Value_Enumeration_Pos
-     (Names   : String;
-      Indexes : System.Address;
-      Hash    : Hash_Function_Ptr;
-      Num     : Natural;
-      Str     : String)
-      return    Integer with Pure_Function;
-   --  Same as Value_Enumeration, except returns Invalid if Value_Enumeration
-   --  would raise Constraint_Error.
-
 end System.Value_N;


diff --git a/gcc/ada/rtsfind.ads b/gcc/ada/rtsfind.ads
--- a/gcc/ada/rtsfind.ads
+++ b/gcc/ada/rtsfind.ads
@@ -2040,9 +2040,9 @@ package Rtsfind is
      RE_Value_Enumeration_16,            -- System.Val_Enum_16
      RE_Value_Enumeration_32,            -- System.Val_Enum_32
 
-     RE_Valid_Enumeration_Value_8,       -- System.Val_Enum_8
-     RE_Valid_Enumeration_Value_16,      -- System.Val_Enum_16
-     RE_Valid_Enumeration_Value_32,      -- System.Val_Enum_32
+     RE_Valid_Value_Enumeration_8,       -- System.Val_Enum_8
+     RE_Valid_Value_Enumeration_16,      -- System.Val_Enum_16
+     RE_Valid_Value_Enumeration_32,      -- System.Val_Enum_32
 
      RE_Value_Fixed32,                   -- System_Val_Fixed_32
 
@@ -3731,11 +3731,11 @@ package Rtsfind is
 
      RE_Value_Enumeration_32             => System_Val_Enum_32,
 
-     RE_Valid_Enumeration_Value_8        => System_Val_Enum_8,
+     RE_Valid_Value_Enumeration_8        => System_Val_Enum_8,
 
-     RE_Valid_Enumeration_Value_16       => System_Val_Enum_16,
+     RE_Valid_Value_Enumeration_16       => System_Val_Enum_16,
 
-     RE_Valid_Enumeration_Value_32       => System_Val_Enum_32,
+     RE_Valid_Value_Enumeration_32       => System_Val_Enum_32,
 
      RE_Value_Fixed32                    => System_Val_Fixed_32,
 


Reply via email to