https://github.com/pratlucas updated https://github.com/llvm/llvm-project/pull/75783
>From 62f4b5daeca0be5b463c5c42271a4b997f084523 Mon Sep 17 00:00:00 2001 From: Lucas Prates <lucas.pra...@arm.com> Date: Mon, 18 Dec 2023 10:49:25 +0000 Subject: [PATCH] [AsmWriter] Ensure getMnemonic doesn't return invalid pointers For instructions that don't map to a mnemonic string, the implementation of MCInstPrinter::getMnemonic would return an invalid pointer due to the result of the calculation of the instruction's position in the `AsmStrs` table. This patch fixes the issue by ensuring those cases return a `nullptr` value instead. Fixes #74177. --- llvm/lib/MC/MCAsmStreamer.cpp | 5 ++++- llvm/utils/TableGen/AsmWriterEmitter.cpp | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/llvm/lib/MC/MCAsmStreamer.cpp b/llvm/lib/MC/MCAsmStreamer.cpp index 9e1d108ac14dc5..532ac89bf9ff76 100644 --- a/llvm/lib/MC/MCAsmStreamer.cpp +++ b/llvm/lib/MC/MCAsmStreamer.cpp @@ -154,7 +154,10 @@ class MCAsmStreamer final : public MCStreamer { void emitGNUAttribute(unsigned Tag, unsigned Value) override; StringRef getMnemonic(MCInst &MI) override { - return InstPrinter->getMnemonic(&MI).first; + std::pair<const char *, uint64_t> M = InstPrinter->getMnemonic(&MI); + assert((M.second != 0 || M.first == nullptr) && + "Invalid char pointer for instruction with no mnemonic"); + return M.first; } void emitLabel(MCSymbol *Symbol, SMLoc Loc = SMLoc()) override; diff --git a/llvm/utils/TableGen/AsmWriterEmitter.cpp b/llvm/utils/TableGen/AsmWriterEmitter.cpp index 0220927295cf78..e0cd5fad3254de 100644 --- a/llvm/utils/TableGen/AsmWriterEmitter.cpp +++ b/llvm/utils/TableGen/AsmWriterEmitter.cpp @@ -438,6 +438,10 @@ void AsmWriterEmitter::EmitGetMnemonic( O << " // Emit the opcode for the instruction.\n"; O << BitsString; + // Make sure we don't return an invalid pointer if bits is 0 + O << " if (Bits == 0)\n" + " return {nullptr, Bits};\n"; + // Return mnemonic string and bits. O << " return {AsmStrs+(Bits & " << (1 << AsmStrBits) - 1 << ")-1, Bits};\n\n"; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits