Skip to content

Commit e0117a5

Browse files
[lldb] Fix undefined behavior (llvm#158119)
https://green.lab.llvm.org/job/llvm.org/view/LLDB/job/lldb-cmake-sanitized/2178/consoleText ``` [2025-09-11T13:10:53.352Z] /Users/ec2-user/jenkins/workspace/llvm.org/lldb-cmake-sanitized/llvm-project/lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp:14138:35: runtime error: signed integer overflow: 2147483624 + 608 cannot be represented in type 'int32_t' (aka 'int') [2025-09-11T13:10:53.352Z] SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /Users/ec2-user/jenkins/workspace/llvm.org/lldb-cmake-sanitized/llvm-project/lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp:14138:35 in ```
1 parent f3efbce commit e0117a5

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14135,7 +14135,13 @@ EmulateInstructionARM::AddWithCarry(uint32_t x, uint32_t y, uint8_t carry_in) {
1413514135
uint8_t overflow;
1413614136

1413714137
uint64_t unsigned_sum = x + y + carry_in;
14138-
int64_t signed_sum = (int32_t)x + (int32_t)y + (int32_t)carry_in;
14138+
int64_t signed_sum = 0;
14139+
int32_t signed_sum32;
14140+
if (llvm::AddOverflow((int32_t)x, (int32_t)y, signed_sum32))
14141+
signed_sum++;
14142+
signed_sum += signed_sum32;
14143+
14144+
signed_sum += (int32_t)carry_in;
1413914145

1414014146
result = UnsignedBits(unsigned_sum, 31, 0);
1414114147
// carry_out = (result == unsigned_sum ? 0 : 1);

0 commit comments

Comments
 (0)