Index: llvm/lib/MC/MCObjectStreamer.cpp =================================================================== --- llvm/lib/MC/MCObjectStreamer.cpp +++ llvm/lib/MC/MCObjectStreamer.cpp @@ -644,6 +644,12 @@ int64_t Expr, SMLoc Loc) { int64_t IntNumValues; if (!NumValues.evaluateAsAbsolute(IntNumValues, getAssemblerPtr())) { + // Byte fills don't need to know NumValues. + if (Size == 1) { + emitFill(NumValues, Expr, Loc); + return; + } + getContext().reportError(Loc, "expected absolute expression"); return; } Index: llvm/lib/MC/MCParser/AsmParser.cpp =================================================================== --- llvm/lib/MC/MCParser/AsmParser.cpp +++ llvm/lib/MC/MCParser/AsmParser.cpp @@ -3141,7 +3141,6 @@ Warning(ExprLoc, "'.fill' directive pattern has been truncated to 32-bits"); getStreamer().emitFill(*NumValues, FillSize, FillExpr, NumValuesLoc); - return false; } Index: llvm/test/MC/X86/pr33586.s =================================================================== --- /dev/null +++ llvm/test/MC/X86/pr33586.s @@ -0,0 +1,16 @@ +# RUN: llvm-mc -triple i686-unknown-unknown %s -filetype=obj -o /dev/null + +.text +early_idt_handler_array: + i = 0 + .rept 32 + .ifeq (0x00027d00 >> i) & 1 + push $0 +.endif + push $i + jmp early_idt_handler_common + i = i + 1 + .fill (early_idt_handler_array - .) + i*9 , 1, 0xcc + .endr +.type early_idt_handler_array, @function +early_idt_handler_common: