diff --git a/llvm/lib/Target/AVR/AVRAsmPrinter.cpp b/llvm/lib/Target/AVR/AVRAsmPrinter.cpp --- a/llvm/lib/Target/AVR/AVRAsmPrinter.cpp +++ b/llvm/lib/Target/AVR/AVRAsmPrinter.cpp @@ -128,8 +128,8 @@ assert(BytesPerReg <= 2 && "Only 8 and 16 bit regs are supported."); unsigned RegIdx = ByteNumber / BytesPerReg; - assert(RegIdx < NumOpRegs && "Multibyte index out of range."); - + if (RegIdx >= NumOpRegs) + return true; Reg = MI->getOperand(OpNum + RegIdx).getReg(); if (BytesPerReg == 2) { diff --git a/llvm/test/CodeGen/AVR/inline-asm/inline-asm-invalid.ll b/llvm/test/CodeGen/AVR/inline-asm/inline-asm-invalid.ll --- a/llvm/test/CodeGen/AVR/inline-asm/inline-asm-invalid.ll +++ b/llvm/test/CodeGen/AVR/inline-asm/inline-asm-invalid.ll @@ -8,3 +8,8 @@ ret void } +define void @foo1() { + ; CHECK: error: invalid operand in inline asm: ';; ${0:C}' + call i16 asm sideeffect ";; ${0:C}", "=d"() + ret void +}