Author: Manna, Soumi
Date: 2023-06-22T13:29:28-07:00
New Revision: 213709e7be031751170f04b05203b3228f87850a

URL: 
https://github.com/llvm/llvm-project/commit/213709e7be031751170f04b05203b3228f87850a
DIFF: 
https://github.com/llvm/llvm-project/commit/213709e7be031751170f04b05203b3228f87850a.diff

LOG: [CLANG] Fix Static Code Analyzer Concerns with bad bit right shift 
operation in getNVPTXLaneID()

In getNVPTXLaneID(CodeGenFunction &), the value of LaneIDBits is 4294967295 
since function call 
llvm::Log2_32(CGF->getTarget()->getGridValue().GV_Warp_Size) might return 
4294967295.

  unsigned LaneIDBits =
       llvm::Log2_32(CGF.getTarget().getGridValue().GV_Warp_Size);
  unsigned LaneIDMask = ~0u >> (32u - LaneIDBits);

The shift amount (32U - LaneIDBits) might be 33, So it has undefined behavior 
for right shifting by more than 31 bits.

This patch adds an assert to guard the LaneIDBits overflow issue with 
LaneIDMask value.

Reviewed By: tahonermann

Differential Revision: https://reviews.llvm.org/D151606

Added: 
    

Modified: 
    clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp 
b/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp
index cf151025eac5d..ad99d681f54cd 100644
--- a/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp
+++ b/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp
@@ -525,6 +525,7 @@ static llvm::Value *getNVPTXLaneID(CodeGenFunction &CGF) {
   CGBuilderTy &Bld = CGF.Builder;
   unsigned LaneIDBits =
       llvm::Log2_32(CGF.getTarget().getGridValue().GV_Warp_Size);
+  assert(LaneIDBits < 32 && "Invalid LaneIDBits size in NVPTX device.");
   unsigned LaneIDMask = ~0u >> (32u - LaneIDBits);
   auto &RT = static_cast<CGOpenMPRuntimeGPU &>(CGF.CGM.getOpenMPRuntime());
   return Bld.CreateAnd(RT.getGPUThreadID(CGF), Bld.getInt32(LaneIDMask),


        
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to