[llvm] bef928f - [llvm] Initialize and move UseUpRegs outside of `union` MemOp struct.

Alexander Belyaev via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 24 08:53:48 PDT 2022


Author: Alexander Belyaev
Date: 2022-03-24T16:53:38+01:00
New Revision: bef928f8b2513208003a686d1af66a6924445567

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

LOG: [llvm] Initialize and move UseUpRegs outside of `union` MemOp struct.

Asan complained about uninitialized bool

`invalid-bool-load`
llvm/lib/Target/X86/AsmParser/X86Operand.h:389:12: runtime error: load
of value 171, which is not a valid value for type 'bool'

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

Added: 
    

Modified: 
    llvm/lib/Target/X86/AsmParser/X86Operand.h

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/X86/AsmParser/X86Operand.h b/llvm/lib/Target/X86/AsmParser/X86Operand.h
index e728ef453b629..00f22190e7d0a 100644
--- a/llvm/lib/Target/X86/AsmParser/X86Operand.h
+++ b/llvm/lib/Target/X86/AsmParser/X86Operand.h
@@ -37,6 +37,10 @@ struct X86Operand final : public MCParsedAsmOperand {
   void *OpDecl;
   bool AddressOf;
 
+  /// This used for inline asm which may specify base reg and index reg for
+  /// MemOp. e.g. ARR[eax + ecx*4], so no extra reg can be used for MemOp.
+  bool UseUpRegs = false;
+
   struct TokOp {
     const char *Data;
     unsigned Length;
@@ -68,10 +72,6 @@ struct X86Operand final : public MCParsedAsmOperand {
     /// If the memory operand is unsized and there are multiple instruction
     /// matches, prefer the one with this size.
     unsigned FrontendSize;
-
-    /// This used for inline asm which may specify base reg and index reg for
-    /// MemOp. e.g. ARR[eax + ecx*4], so no extra reg can be used for MemOp.
-    bool UseUpRegs;
   };
 
   union {
@@ -384,9 +384,7 @@ struct X86Operand final : public MCParsedAsmOperand {
     return isAbsMem() && Mem.ModeSize == 16;
   }
 
-  bool isMemUseUpRegs() const override {
-    return Mem.UseUpRegs;
-  }
+  bool isMemUseUpRegs() const override { return UseUpRegs; }
 
   bool isSrcIdx() const {
     return !getMemIndexReg() && getMemScale() == 1 &&
@@ -685,7 +683,7 @@ struct X86Operand final : public MCParsedAsmOperand {
     Res->Mem.Size     = Size;
     Res->Mem.ModeSize = ModeSize;
     Res->Mem.FrontendSize = FrontendSize;
-    Res->Mem.UseUpRegs = UseUpRegs;
+    Res->UseUpRegs = UseUpRegs;
     Res->SymName      = SymName;
     Res->OpDecl       = OpDecl;
     Res->AddressOf    = false;
@@ -718,7 +716,7 @@ struct X86Operand final : public MCParsedAsmOperand {
     Res->Mem.Size     = Size;
     Res->Mem.ModeSize = ModeSize;
     Res->Mem.FrontendSize = FrontendSize;
-    Res->Mem.UseUpRegs = UseUpRegs;
+    Res->UseUpRegs = UseUpRegs;
     Res->SymName      = SymName;
     Res->OpDecl       = OpDecl;
     Res->AddressOf    = false;


        


More information about the llvm-commits mailing list