[PATCH] D158819: [builtins] Fix signed shift overflows in ashlti3.c, ashrti3.c, ashldi3.c and ashrdi3.c

Karl-Johan Karlsson via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sun Aug 27 21:47:18 PDT 2023


This revision was automatically updated to reflect the committed changes.
Closed by commit rG5ae3211b1051: [builtins] Fix signed shift overflows in ashlti3.c, ashrti3.c, ashldi3.c and… (authored by Ka-Ka).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D158819/new/

https://reviews.llvm.org/D158819

Files:
  compiler-rt/lib/builtins/ashldi3.c
  compiler-rt/lib/builtins/ashlti3.c
  compiler-rt/lib/builtins/ashrdi3.c
  compiler-rt/lib/builtins/ashrti3.c


Index: compiler-rt/lib/builtins/ashrti3.c
===================================================================
--- compiler-rt/lib/builtins/ashrti3.c
+++ compiler-rt/lib/builtins/ashrti3.c
@@ -31,7 +31,8 @@
     if (b == 0)
       return a;
     result.s.high = input.s.high >> b;
-    result.s.low = (input.s.high << (bits_in_dword - b)) | (input.s.low >> b);
+    result.s.low =
+        ((du_int)input.s.high << (bits_in_dword - b)) | (input.s.low >> b);
   }
   return result.all;
 }
Index: compiler-rt/lib/builtins/ashrdi3.c
===================================================================
--- compiler-rt/lib/builtins/ashrdi3.c
+++ compiler-rt/lib/builtins/ashrdi3.c
@@ -29,7 +29,8 @@
     if (b == 0)
       return a;
     result.s.high = input.s.high >> b;
-    result.s.low = (input.s.high << (bits_in_word - b)) | (input.s.low >> b);
+    result.s.low =
+        ((su_int)input.s.high << (bits_in_word - b)) | (input.s.low >> b);
   }
   return result.all;
 }
Index: compiler-rt/lib/builtins/ashlti3.c
===================================================================
--- compiler-rt/lib/builtins/ashlti3.c
+++ compiler-rt/lib/builtins/ashlti3.c
@@ -30,7 +30,8 @@
     if (b == 0)
       return a;
     result.s.low = input.s.low << b;
-    result.s.high = (input.s.high << b) | (input.s.low >> (bits_in_dword - b));
+    result.s.high =
+        ((du_int)input.s.high << b) | (input.s.low >> (bits_in_dword - b));
   }
   return result.all;
 }
Index: compiler-rt/lib/builtins/ashldi3.c
===================================================================
--- compiler-rt/lib/builtins/ashldi3.c
+++ compiler-rt/lib/builtins/ashldi3.c
@@ -28,7 +28,8 @@
     if (b == 0)
       return a;
     result.s.low = input.s.low << b;
-    result.s.high = (input.s.high << b) | (input.s.low >> (bits_in_word - b));
+    result.s.high =
+        ((su_int)input.s.high << b) | (input.s.low >> (bits_in_word - b));
   }
   return result.all;
 }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D158819.553833.patch
Type: text/x-patch
Size: 1944 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230828/c8d008ec/attachment.bin>


More information about the llvm-commits mailing list