forked from OSchip/llvm-project
MIRPrinter: Avoid assert() when printing empty INLINEASM strings.
CodeGen uses MO_ExternalSymbol to represent the inline assembly strings. Empty strings for symbol names appear to be invalid. For now just special case the output code to avoid hitting an `assert()` in `printLLVMNameWithoutPrefix()`. This fixes https://llvm.org/PR33317 llvm-svn: 304815
This commit is contained in:
parent
49220fb6a1
commit
8b5f9e4438
|
@ -16,6 +16,7 @@
|
|||
|
||||
#include "llvm/ADT/STLExtras.h"
|
||||
#include "llvm/ADT/SmallBitVector.h"
|
||||
#include "llvm/ADT/StringExtras.h"
|
||||
#include "llvm/CodeGen/GlobalISel/RegisterBank.h"
|
||||
#include "llvm/CodeGen/MIRYamlMapping.h"
|
||||
#include "llvm/CodeGen/MachineConstantPool.h"
|
||||
|
@ -924,11 +925,17 @@ void MIPrinter::print(const MachineOperand &Op, const TargetRegisterInfo *TRI,
|
|||
case MachineOperand::MO_JumpTableIndex:
|
||||
OS << "%jump-table." << Op.getIndex();
|
||||
break;
|
||||
case MachineOperand::MO_ExternalSymbol:
|
||||
case MachineOperand::MO_ExternalSymbol: {
|
||||
StringRef Name = Op.getSymbolName();
|
||||
OS << '$';
|
||||
printLLVMNameWithoutPrefix(OS, Op.getSymbolName());
|
||||
if (Name.empty()) {
|
||||
OS << "\"\"";
|
||||
} else {
|
||||
printLLVMNameWithoutPrefix(OS, Name);
|
||||
}
|
||||
printOffset(Op.getOffset());
|
||||
break;
|
||||
}
|
||||
case MachineOperand::MO_GlobalAddress:
|
||||
Op.getGlobal()->printAsOperand(OS, /*PrintType=*/false, MST);
|
||||
printOffset(Op.getOffset());
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
# RUN: llc -o - %s -mtriple=x86_64-- -run-pass none | FileCheck %s
|
||||
---
|
||||
# Avoid crash/assert when using an emptystring in an INLINEASM.
|
||||
# CHECK-LABEL: name: emptystring
|
||||
# CHECK: bb.0:
|
||||
# CHECK: INLINEASM $"", 1
|
||||
# CHECK: RET 0
|
||||
name: emptystring
|
||||
body: |
|
||||
bb.0:
|
||||
INLINEASM $"", 1
|
||||
RET 0
|
Loading…
Reference in New Issue