OSDN Git Service

* unwind-pe.h (read_uleb128): Fix handling of large values
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 8 Dec 2003 19:47:12 +0000 (19:47 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 8 Dec 2003 19:47:12 +0000 (19:47 +0000)
(read_sleb128): Fix handling of large values

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@74429 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/unwind-pe.h

index 3cc34b5..6ec2cdd 100644 (file)
@@ -1,3 +1,8 @@
+2003-12-08  Jan Hubicka  <jh@suse.cz>
+
+       * unwind-pe.h (read_uleb128): Fix handling of large values
+       (read_sleb128): Fix handling of large values
+
 2003-12-08  Andrew Pinski  <pinskia@physics.uc.edu>
 
        PR middle-end/10060
index e6aebd7..4bf2cfd 100644 (file)
@@ -137,7 +137,7 @@ read_uleb128 (const unsigned char *p, _Unwind_Word *val)
   do
     {
       byte = *p++;
-      result |= (byte & 0x7f) << shift;
+      result |= ((_Unwind_Word)byte & 0x7f) << shift;
       shift += 7;
     }
   while (byte & 0x80);
@@ -159,14 +159,14 @@ read_sleb128 (const unsigned char *p, _Unwind_Sword *val)
   do
     {
       byte = *p++;
-      result |= (byte & 0x7f) << shift;
+      result |= ((_Unwind_Word)byte & 0x7f) << shift;
       shift += 7;
     }
   while (byte & 0x80);
 
   /* Sign-extend a negative value.  */
   if (shift < 8 * sizeof(result) && (byte & 0x40) != 0)
-    result |= -(1L << shift);
+    result |= -(((_Unwind_Word)1L) << shift);
 
   *val = (_Unwind_Sword) result;
   return p;