mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-01 15:17:25 +00:00
AsmMatchers: Use unique_ptr to manage ownership of MCParsedAsmOperand
I saw at least a memory leak or two from inspection (on probably untested error paths) and r206991, which was the original inspiration for this change. I ran this idea by Jim Grosbach a few weeks ago & he was OK with it. Since it's a basically mechanical patch that seemed sufficient - usual post-commit review, revert, etc, as needed. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@210427 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -14,6 +14,8 @@
|
||||
#include "llvm/MC/MCParser/MCAsmParserExtension.h"
|
||||
#include "llvm/MC/MCTargetOptions.h"
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace llvm {
|
||||
class AsmToken;
|
||||
class MCInst;
|
||||
@@ -23,6 +25,8 @@ class SMLoc;
|
||||
class StringRef;
|
||||
template <typename T> class SmallVectorImpl;
|
||||
|
||||
typedef SmallVectorImpl<std::unique_ptr<MCParsedAsmOperand>> OperandVector;
|
||||
|
||||
enum AsmRewriteKind {
|
||||
AOK_Delete = 0, // Rewrite should be ignored.
|
||||
AOK_Align, // Rewrite align as .align.
|
||||
@@ -131,8 +135,7 @@ public:
|
||||
/// ownership of them to the caller.
|
||||
/// \return True on failure.
|
||||
virtual bool ParseInstruction(ParseInstructionInfo &Info, StringRef Name,
|
||||
SMLoc NameLoc,
|
||||
SmallVectorImpl<MCParsedAsmOperand*> &Operands) = 0;
|
||||
SMLoc NameLoc, OperandVector &Operands) = 0;
|
||||
|
||||
/// ParseDirective - Parse a target specific assembler directive
|
||||
///
|
||||
@@ -156,17 +159,16 @@ public:
|
||||
///
|
||||
/// On failure, the target parser is responsible for emitting a diagnostic
|
||||
/// explaining the match failure.
|
||||
virtual bool
|
||||
MatchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode,
|
||||
SmallVectorImpl<MCParsedAsmOperand*> &Operands,
|
||||
MCStreamer &Out, unsigned &ErrorInfo,
|
||||
bool MatchingInlineAsm) = 0;
|
||||
virtual bool MatchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode,
|
||||
OperandVector &Operands, MCStreamer &Out,
|
||||
unsigned &ErrorInfo,
|
||||
bool MatchingInlineAsm) = 0;
|
||||
|
||||
/// Allow a target to add special case operand matching for things that
|
||||
/// tblgen doesn't/can't handle effectively. For example, literal
|
||||
/// immediates on ARM. TableGen expects a token operand, but the parser
|
||||
/// will recognize them as immediates.
|
||||
virtual unsigned validateTargetOperandClass(MCParsedAsmOperand *Op,
|
||||
virtual unsigned validateTargetOperandClass(MCParsedAsmOperand &Op,
|
||||
unsigned Kind) {
|
||||
return Match_InvalidOperand;
|
||||
}
|
||||
@@ -178,7 +180,7 @@ public:
|
||||
}
|
||||
|
||||
virtual void convertToMapAndConstraints(unsigned Kind,
|
||||
const SmallVectorImpl<MCParsedAsmOperand*> &Operands) = 0;
|
||||
const OperandVector &Operands) = 0;
|
||||
|
||||
virtual const MCExpr *applyModifierToExpr(const MCExpr *E,
|
||||
MCSymbolRefExpr::VariantKind,
|
||||
|
||||
Reference in New Issue
Block a user