[llvm] 935e5e1 - SparcDisassembler: Ensure Size is initialized

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Sun May 4 17:49:32 PDT 2025


Author: Fangrui Song
Date: 2025-05-04T17:49:27-07:00
New Revision: 935e5e127ca330d2cb162520bee8274380a621b2

URL: https://github.com/llvm/llvm-project/commit/935e5e127ca330d2cb162520bee8274380a621b2
DIFF: https://github.com/llvm/llvm-project/commit/935e5e127ca330d2cb162520bee8274380a621b2.diff

LOG: SparcDisassembler: Ensure Size is initialized

To fix uninitialized value with an invalid encoding.

Added: 
    llvm/test/MC/Disassembler/Sparc/invalid.s

Modified: 
    llvm/lib/Target/Sparc/Disassembler/SparcDisassembler.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/Sparc/Disassembler/SparcDisassembler.cpp b/llvm/lib/Target/Sparc/Disassembler/SparcDisassembler.cpp
index 828d638723587..220e4d4e6e56e 100644
--- a/llvm/lib/Target/Sparc/Disassembler/SparcDisassembler.cpp
+++ b/llvm/lib/Target/Sparc/Disassembler/SparcDisassembler.cpp
@@ -276,6 +276,7 @@ static DecodeStatus readInstruction32(ArrayRef<uint8_t> Bytes, uint64_t Address,
     return MCDisassembler::Fail;
   }
 
+  Size = 4;
   Insn = IsLittleEndian
              ? (Bytes[0] << 0) | (Bytes[1] << 8) | (Bytes[2] << 16) |
                    (Bytes[3] << 24)
@@ -306,20 +307,13 @@ DecodeStatus SparcDisassembler::getInstruction(MCInst &Instr, uint64_t &Size,
   {
     Result = decodeInstruction(DecoderTableSparcV832, Instr, Insn, Address, this, STI);
   }
-  if (Result != MCDisassembler::Fail) {
-    Size = 4;
+  if (Result != MCDisassembler::Fail)
     return Result;
-  }
 
   Result =
       decodeInstruction(DecoderTableSparc32, Instr, Insn, Address, this, STI);
 
-  if (Result != MCDisassembler::Fail) {
-    Size = 4;
-    return Result;
-  }
-
-  return MCDisassembler::Fail;
+  return Result;
 }
 
 static bool tryAddingSymbolicOperand(int64_t Value, bool isBranch,

diff  --git a/llvm/test/MC/Disassembler/Sparc/invalid.s b/llvm/test/MC/Disassembler/Sparc/invalid.s
new file mode 100644
index 0000000000000..5ff317e6a8222
--- /dev/null
+++ b/llvm/test/MC/Disassembler/Sparc/invalid.s
@@ -0,0 +1,7 @@
+# RUN: llvm-mc --disassemble %s -triple=sparcv9 2>&1 | FileCheck %s
+
+0xff 0xdc 0xba 0x98
+# CHECK: [[@LINE-1]]:1: warning: invalid instruction encoding
+
+0xff 0xdc 0xba 0x98
+# CHECK: [[@LINE-1]]:1: warning: invalid instruction encoding


        


More information about the llvm-commits mailing list