a-stwisu.adb, [...] (Super_Slice): Fix slice index.
authorArnaud Charlet <charlet@gcc.gnu.org>
Wed, 15 Feb 2006 09:32:25 +0000 (10:32 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Wed, 15 Feb 2006 09:32:25 +0000 (10:32 +0100)
* a-stwisu.adb, a-strsup.adb, a-stzsup.adb (Super_Slice): Fix slice
index.

* a-stwima.adb (To_Set): Add extra check when N = 0.

* g-regpat.adb: (Match_Simple_Operator): Avoid possible overflow.

From-SVN: r111033

gcc/ada/a-strsup.adb
gcc/ada/a-stwisu.adb
gcc/ada/a-stzsup.adb
gcc/ada/g-regpat.adb

index 1b1c9090c9232731f4a0a08d02e248ca54d66b3c..a53a94d5e41f95b0e8bb734d5cca0917f0f051f9 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 2003-2005, Free Software Foundation, Inc.         --
+--          Copyright (C) 2003-2006, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -1471,7 +1471,7 @@ package body Ada.Strings.Superbounded is
          raise Index_Error;
       else
          Result.Current_Length := High - Low + 1;
-         Result.Data (1 .. Source.Current_Length) := Source.Data (Low .. High);
+         Result.Data (1 .. Result.Current_Length) := Source.Data (Low .. High);
       end if;
 
       return Result;
@@ -1490,7 +1490,7 @@ package body Ada.Strings.Superbounded is
          raise Index_Error;
       else
          Target.Current_Length := High - Low + 1;
-         Target.Data (1 .. Source.Current_Length) := Source.Data (Low .. High);
+         Target.Data (1 .. Target.Current_Length) := Source.Data (Low .. High);
       end if;
    end Super_Slice;
 
index 5984e5e117fe9ca9b2e0602299bea7cb08564d66..ad15f3db08cec6aa1ddd61f9ce755e0322b7378f 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 2003-2005, Free Software Foundation, Inc.         --
+--          Copyright (C) 2003-2006, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -1474,7 +1474,7 @@ package body Ada.Strings.Wide_Superbounded is
          raise Index_Error;
       else
          Result.Current_Length := High - Low + 1;
-         Result.Data (1 .. Source.Current_Length) := Source.Data (Low .. High);
+         Result.Data (1 .. Result.Current_Length) := Source.Data (Low .. High);
       end if;
 
       return Result;
@@ -1493,7 +1493,7 @@ package body Ada.Strings.Wide_Superbounded is
          raise Index_Error;
       else
          Target.Current_Length := High - Low + 1;
-         Target.Data (1 .. Source.Current_Length) := Source.Data (Low .. High);
+         Target.Data (1 .. Target.Current_Length) := Source.Data (Low .. High);
       end if;
    end Super_Slice;
 
index 9e4fbcd20f161c62ef865187fd2314f59e829977..6b8e710f2f9e0026fb142cf496aceb33eb2dce63 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 2003-2005, Free Software Foundation, Inc.         --
+--          Copyright (C) 2003-2006, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -1481,7 +1481,7 @@ package body Ada.Strings.Wide_Wide_Superbounded is
          raise Index_Error;
       else
          Result.Current_Length := High - Low + 1;
-         Result.Data (1 .. Source.Current_Length) := Source.Data (Low .. High);
+         Result.Data (1 .. Result.Current_Length) := Source.Data (Low .. High);
       end if;
 
       return Result;
@@ -1500,7 +1500,7 @@ package body Ada.Strings.Wide_Wide_Superbounded is
          raise Index_Error;
       else
          Target.Current_Length := High - Low + 1;
-         Target.Data (1 .. Source.Current_Length) := Source.Data (Low .. High);
+         Target.Data (1 .. Target.Current_Length) := Source.Data (Low .. High);
       end if;
    end Super_Slice;
 
index c52b5f2c894eaa0e22894fe1d187047312e51a4e..6bfc2d9f3e3d613332f6fde0bc560536f0be5390 100644 (file)
@@ -7,7 +7,7 @@
 --                                 B o d y                                  --
 --                                                                          --
 --               Copyright (C) 1986 by University of Toronto.               --
---                      Copyright (C) 1999-2005, AdaCore                    --
+--                      Copyright (C) 1999-2006, AdaCore                    --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -2878,12 +2878,14 @@ package body GNAT.Regpat is
             if Next_Char_Known then
                --  Last position to check
 
-               Last_Pos := Input_Pos + Max;
-
-               if Last_Pos > Last_In_Data
-                 or else Max = Natural'Last
-               then
+               if Max = Natural'Last then
                   Last_Pos := Last_In_Data;
+               else
+                  Last_Pos := Input_Pos + Max;
+
+                  if Last_Pos > Last_In_Data then
+                     Last_Pos := Last_In_Data;
+                  end if;
                end if;
 
                --  Look for the first possible opportunity