diff options
author | Chad Rosier <mcrosier@apple.com> | 2013-04-24 22:53:10 +0000 |
---|---|---|
committer | Chad Rosier <mcrosier@apple.com> | 2013-04-24 22:53:10 +0000 |
commit | 2871ba90a3d3544fa1f136c7d4efbb619298d6e8 (patch) | |
tree | d7bb1a72a161ea5764173da6ae33bd8b7c91d618 /lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp | |
parent | 034f4be273f0ec629da4bc8369578fc195f3212f (diff) | |
download | llvm-2871ba90a3d3544fa1f136c7d4efbb619298d6e8.tar.gz llvm-2871ba90a3d3544fa1f136c7d4efbb619298d6e8.tar.bz2 llvm-2871ba90a3d3544fa1f136c7d4efbb619298d6e8.tar.xz |
[inline asm] Fix a crasher for an invalid value type/register class.
rdar://13731657
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@180226 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp')
-rw-r--r-- | lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp index c1c8be4387..6e613d606f 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp @@ -6171,10 +6171,17 @@ void SelectionDAGBuilder::visitInlineAsm(ImmutableCallSite CS) { MatchedRegs.RegVTs.push_back(RegVT); MachineRegisterInfo &RegInfo = DAG.getMachineFunction().getRegInfo(); for (unsigned i = 0, e = InlineAsm::getNumOperandRegisters(OpFlag); - i != e; ++i) - MatchedRegs.Regs.push_back - (RegInfo.createVirtualRegister(TLI.getRegClassFor(RegVT))); - + i != e; ++i) { + if (const TargetRegisterClass *RC = TLI.getRegClassFor(RegVT)) + MatchedRegs.Regs.push_back(RegInfo.createVirtualRegister(RC)); + else { + LLVMContext &Ctx = *DAG.getContext(); + Ctx.emitError(CS.getInstruction(), "inline asm error: This value" + " type register class is not natively supported!"); + report_fatal_error("inline asm error: This value type register " + "class is not natively supported!"); + } + } // Use the produced MatchedRegs object to MatchedRegs.getCopyToRegs(InOperandVal, DAG, getCurDebugLoc(), Chain, &Flag, CS.getInstruction()); |