[PATCH] D126288: [TableGen][CodeEmitterGen] Do not crash on insufficient positional instruction operands.
Ivan Kosarev via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 10 06:39:28 PDT 2022
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGeccbe6d1226a: [TableGen][CodeEmitterGen] Do not crash on insufficient positional instruction… (authored by kosarev).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D126288/new/
https://reviews.llvm.org/D126288
Files:
llvm/test/TableGen/InsufficientPositionalOperands.td
llvm/utils/TableGen/CodeEmitterGen.cpp
Index: llvm/utils/TableGen/CodeEmitterGen.cpp
===================================================================
--- llvm/utils/TableGen/CodeEmitterGen.cpp
+++ llvm/utils/TableGen/CodeEmitterGen.cpp
@@ -22,6 +22,7 @@
#include "llvm/ADT/StringExtras.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/raw_ostream.h"
+#include "llvm/TableGen/Error.h"
#include "llvm/TableGen/Record.h"
#include "llvm/TableGen/TableGenBackend.h"
#include <cassert>
@@ -118,16 +119,16 @@
(!NamedOpIndices.empty() && NamedOpIndices.count(
CGI.Operands.getSubOperandNumber(NumberedOp).first)))) {
++NumberedOp;
+ }
- if (NumberedOp >= CGI.Operands.back().MIOperandNo +
- CGI.Operands.back().MINumOperands) {
- errs() << "Too few operands in record " << R->getName() <<
- " (no match for variable " << VarName << "):\n";
- errs() << *R;
- errs() << '\n';
-
- return;
- }
+ if (NumberedOp >=
+ CGI.Operands.back().MIOperandNo + CGI.Operands.back().MINumOperands) {
+ std::string E;
+ raw_string_ostream S(E);
+ S << "Too few operands in record " << R->getName()
+ << " (no match for variable " << VarName << "):\n";
+ S << *R;
+ PrintFatalError(R, E);
}
OpIdx = NumberedOp++;
Index: llvm/test/TableGen/InsufficientPositionalOperands.td
===================================================================
--- /dev/null
+++ llvm/test/TableGen/InsufficientPositionalOperands.td
@@ -0,0 +1,30 @@
+// RUN: not llvm-tblgen -gen-emitter -I %p/../../include %s 2>&1 | FileCheck %s
+
+// Check that TableGen doesn't crash on insufficient positional
+// instruction operands.
+
+include "llvm/Target/Target.td"
+
+def ArchInstrInfo : InstrInfo { }
+
+def Arch : Target {
+ let InstructionSet = ArchInstrInfo;
+}
+
+def Reg : Register<"reg">;
+
+def Regs : RegisterClass<"foo", [i32], 0, (add Reg)>;
+
+def foo : Instruction {
+ bits<3> rd;
+ bits<3> rs;
+
+ bits<8> Inst;
+ let Inst{1-0} = 0;
+ let Inst{4-2} = rd;
+ let Inst{7-5} = rs;
+
+// CHECK: Too few operands in record foo (no match for variable rs)
+ let OutOperandList = (outs Regs:$xd);
+ let InOperandList = (ins);
+}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D126288.435897.patch
Type: text/x-patch
Size: 2246 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220610/805309ae/attachment.bin>
More information about the llvm-commits
mailing list