[llvm] r253328 - [Assembler] Make fatal assembler errors non-fatal

Manuel Klimek via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 18 05:08:18 PST 2015


Note: this change lands us in this assert in
est/MC/COFF/secidx-diagnostic.s:

lib/MC/WinCOFFObjectWriter.cpp:1065: virtual void (anonymous
namespace)::WinCOFFObjectWriter::writeObject(llvm::MCAssembler &, const
llvm::MCAsmLayout &): Assertion `getStream().tell() <=
(*i)->Header.PointerToRawData && "Section::PointerToRawData is insane!"'
failed.

Some of the time; I'm currently trying to figure out what exactly triggers
this.

On Tue, Nov 17, 2015 at 11:03 AM Oliver Stannard via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: olista01
> Date: Tue Nov 17 04:00:43 2015
> New Revision: 253328
>
> URL: http://llvm.org/viewvc/llvm-project?rev=253328&view=rev
> Log:
> [Assembler] Make fatal assembler errors non-fatal
>
> Currently, if the assembler encounters an error after parsing (such as an
> out-of-range fixup), it reports this as a fatal error, and so stops after
> the
> first error. However, for most of these there is an obvious way to recover
> after emitting the error, such as emitting the fixup with a value of zero.
> This
> means that we can report on all of the errors in a file, not just the first
> one. MCContext::reportError records the fact that an error was
> encountered, so
> we won't actually emit an object file with the incorrect contents.
>
> Differential Revision: http://reviews.llvm.org/D14717
>
>
> Added:
>     llvm/trunk/test/MC/ARM/thumb1-relax.s
>     llvm/trunk/test/MC/MachO/AArch64/reloc-errors.s
> Removed:
>     llvm/trunk/test/MC/ARM/thumb1-relax-adr-local.s
>     llvm/trunk/test/MC/ARM/thumb1-relax-bcc-local.s
>     llvm/trunk/test/MC/ARM/thumb1-relax-br-local.s
>     llvm/trunk/test/MC/ARM/thumb1-relax-ldrlit-local-behind.s
>     llvm/trunk/test/MC/ARM/thumb1-relax-ldrlit-local-misaligned.s
>     llvm/trunk/test/MC/ARM/thumb1-relax-ldrlit-local-range.s
>     llvm/trunk/test/MC/MachO/bad-darwin-x86_64-reloc-expr1.s
>     llvm/trunk/test/MC/MachO/bad-darwin-x86_64-reloc-expr2.s
> Modified:
>     llvm/trunk/include/llvm/MC/MCWinCOFFStreamer.h
>     llvm/trunk/lib/MC/ELFObjectWriter.cpp
>     llvm/trunk/lib/MC/MCAssembler.cpp
>     llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp
>     llvm/trunk/lib/MC/WinCOFFStreamer.cpp
>     llvm/trunk/lib/Target/AArch64/MCTargetDesc/AArch64MachObjectWriter.cpp
>     llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
>     llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp
>     llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMMachObjectWriter.cpp
>     llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp
>     llvm/trunk/lib/Target/PowerPC/MCTargetDesc/PPCMachObjectWriter.cpp
>     llvm/trunk/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp
>     llvm/trunk/test/MC/AArch64/error-location.s
>     llvm/trunk/test/MC/ARM/arm-elf-relocation-diagnostics.s
>     llvm/trunk/test/MC/ARM/error-location.s
>     llvm/trunk/test/MC/COFF/bad-expr.s
>     llvm/trunk/test/MC/COFF/invalid-def.s
>     llvm/trunk/test/MC/COFF/invalid-endef.s
>     llvm/trunk/test/MC/COFF/invalid-scl-range.s
>     llvm/trunk/test/MC/COFF/invalid-scl.s
>     llvm/trunk/test/MC/COFF/invalid-type.s
>     llvm/trunk/test/MC/COFF/label-undefined.s
>     llvm/trunk/test/MC/COFF/secidx-diagnostic.s
>     llvm/trunk/test/MC/ELF/common-error1.s
>     llvm/trunk/test/MC/ELF/common-error2.s
>     llvm/trunk/test/MC/MachO/ARM/bad-darwin-ARM-reloc.s
>     llvm/trunk/test/MC/MachO/bad-darwin-x86_64-diff-relocs.s
>     llvm/trunk/test/MC/Mips/micromips-diagnostic-fixup.s
>     llvm/trunk/test/MC/Mips/micromips-pc16-fixup.s
>     llvm/trunk/test/MC/Mips/mips-diagnostic-fixup.s
>     llvm/trunk/test/MC/Mips/mips-pc16-fixup.s
>
> Modified: llvm/trunk/include/llvm/MC/MCWinCOFFStreamer.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCWinCOFFStreamer.h?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/MC/MCWinCOFFStreamer.h (original)
> +++ llvm/trunk/include/llvm/MC/MCWinCOFFStreamer.h Tue Nov 17 04:00:43 2015
> @@ -73,7 +73,7 @@ protected:
>    void EmitInstToData(const MCInst &Inst, const MCSubtargetInfo &STI)
> override;
>
>  private:
> -  LLVM_ATTRIBUTE_NORETURN void FatalError(const Twine &Msg) const;
> +  void Error(const Twine &Msg) const;
>  };
>  }
>
>
> Modified: llvm/trunk/lib/MC/ELFObjectWriter.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/ELFObjectWriter.cpp?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/MC/ELFObjectWriter.cpp (original)
> +++ llvm/trunk/lib/MC/ELFObjectWriter.cpp Tue Nov 17 04:00:43 2015
> @@ -630,28 +630,36 @@ void ELFObjectWriter::recordRelocation(M
>      // In general, ELF has no relocations for -B. It can only represent
> (A + C)
>      // or (A + C - R). If B = R + K and the relocation is not pcrel, we
> can
>      // replace B to implement it: (A - R - K + C)
> -    if (IsPCRel)
> -      Asm.getContext().reportFatalError(
> +    if (IsPCRel) {
> +      Asm.getContext().reportError(
>            Fixup.getLoc(),
>            "No relocation available to represent this relative
> expression");
> +      return;
> +    }
>
>      const auto &SymB = cast<MCSymbolELF>(RefB->getSymbol());
>
> -    if (SymB.isUndefined())
> -      Asm.getContext().reportFatalError(
> +    if (SymB.isUndefined()) {
> +      Asm.getContext().reportError(
>            Fixup.getLoc(),
>            Twine("symbol '") + SymB.getName() +
>                "' can not be undefined in a subtraction expression");
> +      return;
> +    }
>
>      assert(!SymB.isAbsolute() && "Should have been folded");
>      const MCSection &SecB = SymB.getSection();
> -    if (&SecB != &FixupSection)
> -      Asm.getContext().reportFatalError(
> +    if (&SecB != &FixupSection) {
> +      Asm.getContext().reportError(
>            Fixup.getLoc(), "Cannot represent a difference across
> sections");
> +      return;
> +    }
>
> -    if (::isWeak(SymB))
> -      Asm.getContext().reportFatalError(
> +    if (::isWeak(SymB)) {
> +      Asm.getContext().reportError(
>            Fixup.getLoc(), "Cannot represent a subtraction with a weak
> symbol");
> +      return;
> +    }
>
>      uint64_t SymBOffset = Layout.getSymbolOffset(SymB);
>      uint64_t K = SymBOffset - FixupOffset;
> @@ -784,8 +792,10 @@ void ELFObjectWriter::computeSymbolTable
>                      Renames.count(&Symbol)))
>        continue;
>
> -    if (Symbol.isTemporary() && Symbol.isUndefined())
> -      Ctx.reportFatalError(SMLoc(), "Undefined temporary");
> +    if (Symbol.isTemporary() && Symbol.isUndefined()) {
> +      Ctx.reportError(SMLoc(), "Undefined temporary symbol");
> +      continue;
> +    }
>
>      ELFSymbolData MSD;
>      MSD.Symbol = cast<MCSymbolELF>(&Symbol);
>
> Modified: llvm/trunk/lib/MC/MCAssembler.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAssembler.cpp?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/MC/MCAssembler.cpp (original)
> +++ llvm/trunk/lib/MC/MCAssembler.cpp Tue Nov 17 04:00:43 2015
> @@ -179,14 +179,19 @@ const MCSymbol *MCAsmLayout::getBaseSymb
>
>    const MCExpr *Expr = Symbol.getVariableValue();
>    MCValue Value;
> -  if (!Expr->evaluateAsValue(Value, *this))
> -    llvm_unreachable("Invalid Expression");
> +  if (!Expr->evaluateAsValue(Value, *this)) {
> +    Assembler.getContext().reportError(
> +        SMLoc(), "expression could not be evaluated");
> +    return nullptr;
> +  }
>
>    const MCSymbolRefExpr *RefB = Value.getSymB();
> -  if (RefB)
> -    Assembler.getContext().reportFatalError(
> +  if (RefB) {
> +    Assembler.getContext().reportError(
>          SMLoc(), Twine("symbol '") + RefB->getSymbol().getName() +
>                       "' could not be evaluated in a subtraction
> expression");
> +    return nullptr;
> +  }
>
>    const MCSymbolRefExpr *A = Value.getSymA();
>    if (!A)
> @@ -196,9 +201,10 @@ const MCSymbol *MCAsmLayout::getBaseSymb
>    const MCAssembler &Asm = getAssembler();
>    if (ASym.isCommon()) {
>      // FIXME: we should probably add a SMLoc to MCExpr.
> -    Asm.getContext().reportFatalError(SMLoc(),
> -                                "Common symbol " + ASym.getName() +
> -                                    " cannot be used in assignment expr");
> +    Asm.getContext().reportError(SMLoc(),
> +                                 "Common symbol '" + ASym.getName() +
> +                                     "' cannot be used in assignment
> expr");
> +    return nullptr;
>    }
>
>    return &ASym;
> @@ -436,8 +442,13 @@ bool MCAssembler::evaluateFixup(const MC
>    // probably merge the two into a single callback that tries to evaluate
> a
>    // fixup and records a relocation if one is needed.
>    const MCExpr *Expr = Fixup.getValue();
> -  if (!Expr->evaluateAsRelocatable(Target, &Layout, &Fixup))
> -    getContext().reportFatalError(Fixup.getLoc(), "expected relocatable
> expression");
> +  if (!Expr->evaluateAsRelocatable(Target, &Layout, &Fixup)) {
> +    getContext().reportError(Fixup.getLoc(), "expected relocatable
> expression");
> +    // Claim to have completely evaluated the fixup, to prevent any
> further
> +    // processing from being done.
> +    Value = 0;
> +    return true;
> +  }
>
>    bool IsPCRel = Backend.getFixupKindInfo(
>      Fixup.getKind()).Flags & MCFixupKindInfo::FKF_IsPCRel;
>
> Modified: llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp (original)
> +++ llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp Tue Nov 17 04:00:43 2015
> @@ -706,14 +706,17 @@ void WinCOFFObjectWriter::recordRelocati
>
>    const MCSymbol &Symbol = Target.getSymA()->getSymbol();
>    const MCSymbol &A = Symbol;
> -  if (!A.isRegistered())
> -    Asm.getContext().reportFatalError(Fixup.getLoc(),
> +  if (!A.isRegistered()) {
> +    Asm.getContext().reportError(Fixup.getLoc(),
>                                        Twine("symbol '") + A.getName() +
>                                            "' can not be undefined");
> +    return;
> +  }
>    if (A.isTemporary() && A.isUndefined()) {
> -    Asm.getContext().reportFatalError(Fixup.getLoc(),
> +    Asm.getContext().reportError(Fixup.getLoc(),
>                                        Twine("assembler label '") +
> A.getName() +
>                                            "' can not be undefined");
> +    return;
>    }
>
>    MCSection *Section = Fragment->getParent();
> @@ -731,17 +734,21 @@ void WinCOFFObjectWriter::recordRelocati
>
>    if (SymB) {
>      const MCSymbol *B = &SymB->getSymbol();
> -    if (!B->getFragment())
> -      Asm.getContext().reportFatalError(
> +    if (!B->getFragment()) {
> +      Asm.getContext().reportError(
>            Fixup.getLoc(),
>            Twine("symbol '") + B->getName() +
>                "' can not be undefined in a subtraction expression");
> +      return;
> +    }
>
> -    if (!A.getFragment())
> -      Asm.getContext().reportFatalError(
> +    if (!A.getFragment()) {
> +      Asm.getContext().reportError(
>            Fixup.getLoc(),
>            Twine("symbol '") + Symbol.getName() +
>                "' can not be undefined in a subtraction expression");
> +      return;
> +    }
>
>      CrossSection = &Symbol.getSection() != &B->getSection();
>
>
> Modified: llvm/trunk/lib/MC/WinCOFFStreamer.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/WinCOFFStreamer.cpp?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/MC/WinCOFFStreamer.cpp (original)
> +++ llvm/trunk/lib/MC/WinCOFFStreamer.cpp Tue Nov 17 04:00:43 2015
> @@ -122,29 +122,37 @@ void MCWinCOFFStreamer::BeginCOFFSymbolD
>           "Got non-COFF section in the COFF backend!");
>
>    if (CurSymbol)
> -    FatalError("starting a new symbol definition without completing the "
> -               "previous one");
> +    Error("starting a new symbol definition without completing the "
> +          "previous one");
>    CurSymbol = Symbol;
>  }
>
>  void MCWinCOFFStreamer::EmitCOFFSymbolStorageClass(int StorageClass) {
> -  if (!CurSymbol)
> -    FatalError("storage class specified outside of symbol definition");
> +  if (!CurSymbol) {
> +    Error("storage class specified outside of symbol definition");
> +    return;
> +  }
>
> -  if (StorageClass & ~COFF::SSC_Invalid)
> -    FatalError("storage class value '" + Twine(StorageClass) +
> +  if (StorageClass & ~COFF::SSC_Invalid) {
> +    Error("storage class value '" + Twine(StorageClass) +
>                 "' out of range");
> +    return;
> +  }
>
>    getAssembler().registerSymbol(*CurSymbol);
>    cast<MCSymbolCOFF>(CurSymbol)->setClass((uint16_t)StorageClass);
>  }
>
>  void MCWinCOFFStreamer::EmitCOFFSymbolType(int Type) {
> -  if (!CurSymbol)
> -    FatalError("symbol type specified outside of a symbol definition");
> +  if (!CurSymbol) {
> +    Error("symbol type specified outside of a symbol definition");
> +    return;
> +  }
>
> -  if (Type & ~0xffff)
> -    FatalError("type value '" + Twine(Type) + "' out of range");
> +  if (Type & ~0xffff) {
> +    Error("type value '" + Twine(Type) + "' out of range");
> +    return;
> +  }
>
>    getAssembler().registerSymbol(*CurSymbol);
>    cast<MCSymbolCOFF>(CurSymbol)->setType((uint16_t)Type);
> @@ -152,7 +160,7 @@ void MCWinCOFFStreamer::EmitCOFFSymbolTy
>
>  void MCWinCOFFStreamer::EndCOFFSymbolDef() {
>    if (!CurSymbol)
> -    FatalError("ending symbol definition without starting one");
> +    Error("ending symbol definition without starting one");
>    CurSymbol = nullptr;
>  }
>
> @@ -281,9 +289,8 @@ void MCWinCOFFStreamer::FinishImpl() {
>    MCObjectStreamer::FinishImpl();
>  }
>
> -LLVM_ATTRIBUTE_NORETURN
> -void MCWinCOFFStreamer::FatalError(const Twine &Msg) const {
> -  getContext().reportFatalError(SMLoc(), Msg);
> +void MCWinCOFFStreamer::Error(const Twine &Msg) const {
> +  getContext().reportError(SMLoc(), Msg);
>  }
>  }
>
>
> Modified:
> llvm/trunk/lib/Target/AArch64/MCTargetDesc/AArch64MachObjectWriter.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/MCTargetDesc/AArch64MachObjectWriter.cpp?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/AArch64/MCTargetDesc/AArch64MachObjectWriter.cpp
> (original)
> +++ llvm/trunk/lib/Target/AArch64/MCTargetDesc/AArch64MachObjectWriter.cpp
> Tue Nov 17 04:00:43 2015
> @@ -90,9 +90,11 @@ bool AArch64MachObjectWriter::getAArch64
>      Log2Size = llvm::Log2_32(4);
>      // This encompasses the relocation for the whole 21-bit value.
>      switch (Sym->getKind()) {
> -    default:
> -      Asm.getContext().reportFatalError(Fixup.getLoc(),
> -                                  "ADR/ADRP relocations must be GOT
> relative");
> +    default: {
> +      Asm.getContext().reportError(Fixup.getLoc(),
> +                                   "ADR/ADRP relocations must be GOT
> relative");
> +      return false;
> +    }
>      case MCSymbolRefExpr::VK_PAGE:
>        RelocType = unsigned(MachO::ARM64_RELOC_PAGE21);
>        return true;
> @@ -170,25 +172,25 @@ void AArch64MachObjectWriter::recordRelo
>    // assembler local symbols. If we got here, that's not what we have,
>    // so complain loudly.
>    if (Kind == AArch64::fixup_aarch64_pcrel_branch19) {
> -    Asm.getContext().reportFatalError(Fixup.getLoc(),
> -                                "conditional branch requires
> assembler-local"
> -                                " label. '" +
> -
> Target.getSymA()->getSymbol().getName() +
> -                                    "' is external.");
> +    Asm.getContext().reportError(Fixup.getLoc(),
> +                                 "conditional branch requires
> assembler-local"
> +                                 " label. '" +
> +
>  Target.getSymA()->getSymbol().getName() +
> +                                     "' is external.");
>      return;
>    }
>
>    // 14-bit branch relocations should only target internal labels, and so
>    // should never get here.
>    if (Kind == AArch64::fixup_aarch64_pcrel_branch14) {
> -    Asm.getContext().reportFatalError(Fixup.getLoc(),
> -                                "Invalid relocation on conditional
> branch!");
> +    Asm.getContext().reportError(Fixup.getLoc(),
> +                                 "Invalid relocation on conditional
> branch!");
>      return;
>    }
>
>    if (!getAArch64FixupKindMachOInfo(Fixup, Type, Target.getSymA(),
> Log2Size,
> -                                  Asm)) {
> -    Asm.getContext().reportFatalError(Fixup.getLoc(), "unknown AArch64
> fixup kind!");
> +                                    Asm)) {
> +    Asm.getContext().reportError(Fixup.getLoc(), "unknown AArch64 fixup
> kind!");
>      return;
>    }
>
> @@ -200,8 +202,9 @@ void AArch64MachObjectWriter::recordRelo
>      Type = MachO::ARM64_RELOC_UNSIGNED;
>
>      if (IsPCRel) {
> -      Asm.getContext().reportFatalError(Fixup.getLoc(),
> -                                  "PC relative absolute relocation!");
> +      Asm.getContext().reportError(Fixup.getLoc(),
> +                                   "PC relative absolute relocation!");
> +      return;
>
>        // FIXME: x86_64 sets the type to a branch reloc here. Should we do
>        // something similar?
> @@ -229,16 +232,20 @@ void AArch64MachObjectWriter::recordRelo
>        Writer->addRelocation(A_Base, Fragment->getParent(), MRE);
>        return;
>      } else if (Target.getSymA()->getKind() != MCSymbolRefExpr::VK_None ||
> -               Target.getSymB()->getKind() != MCSymbolRefExpr::VK_None)
> +               Target.getSymB()->getKind() != MCSymbolRefExpr::VK_None) {
>        // Otherwise, neither symbol can be modified.
> -      Asm.getContext().reportFatalError(Fixup.getLoc(),
> -                                  "unsupported relocation of modified
> symbol");
> +      Asm.getContext().reportError(Fixup.getLoc(),
> +                                   "unsupported relocation of modified
> symbol");
> +      return;
> +    }
>
>      // We don't support PCrel relocations of differences.
> -    if (IsPCRel)
> -      Asm.getContext().reportFatalError(Fixup.getLoc(),
> -                                  "unsupported pc-relative relocation of "
> -                                  "difference");
> +    if (IsPCRel) {
> +      Asm.getContext().reportError(Fixup.getLoc(),
> +                                   "unsupported pc-relative relocation of
> "
> +                                   "difference");
> +      return;
> +    }
>
>      // AArch64 always uses external relocations. If there is no symbol to
> use as
>      // a base address (a local symbol with no preceding non-local symbol),
> @@ -246,20 +253,26 @@ void AArch64MachObjectWriter::recordRelo
>      //
>      // FIXME: We should probably just synthesize an external symbol and
> use
>      // that.
> -    if (!A_Base)
> -      Asm.getContext().reportFatalError(
> +    if (!A_Base) {
> +      Asm.getContext().reportError(
>            Fixup.getLoc(),
>            "unsupported relocation of local symbol '" + A->getName() +
>                "'. Must have non-local symbol earlier in section.");
> -    if (!B_Base)
> -      Asm.getContext().reportFatalError(
> +      return;
> +    }
> +    if (!B_Base) {
> +      Asm.getContext().reportError(
>            Fixup.getLoc(),
>            "unsupported relocation of local symbol '" + B->getName() +
>                "'. Must have non-local symbol earlier in section.");
> +      return;
> +    }
>
> -    if (A_Base == B_Base && A_Base)
> -      Asm.getContext().reportFatalError(Fixup.getLoc(),
> -                                  "unsupported relocation with identical
> base");
> +    if (A_Base == B_Base && A_Base) {
> +      Asm.getContext().reportError(
> +          Fixup.getLoc(), "unsupported relocation with identical base");
> +      return;
> +    }
>
>      Value += (!A->getFragment() ? 0 : Writer->getSymbolAddress(*A,
> Layout)) -
>               (!A_Base || !A_Base->getFragment() ? 0 :
> Writer->getSymbolAddress(
> @@ -309,10 +322,12 @@ void AArch64MachObjectWriter::recordRelo
>        // we need to preserve and merge with the new Target? How about
>        // the FixedValue?
>        if (!Symbol->getVariableValue()->evaluateAsRelocatable(Target,
> &Layout,
> -                                                             &Fixup))
> -        Asm.getContext().reportFatalError(Fixup.getLoc(),
> -                                    "unable to resolve variable '" +
> -                                        Symbol->getName() + "'");
> +                                                             &Fixup)) {
> +        Asm.getContext().reportError(Fixup.getLoc(),
> +                                     "unable to resolve variable '" +
> +                                         Symbol->getName() + "'");
> +        return;
> +      }
>        return recordRelocation(Writer, Asm, Layout, Fragment, Fixup,
> Target,
>                                FixedValue);
>      }
> @@ -337,11 +352,13 @@ void AArch64MachObjectWriter::recordRelo
>          Value +=
>              Layout.getSymbolOffset(*Symbol) -
> Layout.getSymbolOffset(*Base);
>      } else if (Symbol->isInSection()) {
> -      if (!CanUseLocalRelocation)
> -        Asm.getContext().reportFatalError(
> +      if (!CanUseLocalRelocation) {
> +        Asm.getContext().reportError(
>              Fixup.getLoc(),
>              "unsupported relocation of local symbol '" +
> Symbol->getName() +
>                  "'. Must have non-local symbol earlier in section.");
> +        return;
> +      }
>        // Adjust the relocation to be section-relative.
>        // The index is the section ordinal (1-based).
>        const MCSection &Sec = Symbol->getSection();
> @@ -361,9 +378,10 @@ void AArch64MachObjectWriter::recordRelo
>            return;
>          }
>        }
> -      Asm.getContext().reportFatalError(Fixup.getLoc(),
> +      Asm.getContext().reportError(Fixup.getLoc(),
>                                    "unsupported relocation of variable '" +
>                                        Symbol->getName() + "'");
> +      return;
>      }
>    }
>
>
> Modified: llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp Tue Nov 17
> 04:00:43 2015
> @@ -395,8 +395,10 @@ unsigned ARMAsmBackend::adjustFixupValue
>        Value = -Value;
>        isAdd = false;
>      }
> -    if (Ctx && Value >= 4096)
> -      Ctx->reportFatalError(Fixup.getLoc(), "out of range pc-relative
> fixup value");
> +    if (Ctx && Value >= 4096) {
> +      Ctx->reportError(Fixup.getLoc(), "out of range pc-relative fixup
> value");
> +      return 0;
> +    }
>      Value |= isAdd << 23;
>
>      // Same addressing mode as fixup_arm_pcrel_10,
> @@ -414,8 +416,10 @@ unsigned ARMAsmBackend::adjustFixupValue
>        Value = -Value;
>        opc = 2; // 0b0010
>      }
> -    if (Ctx && ARM_AM::getSOImmVal(Value) == -1)
> -      Ctx->reportFatalError(Fixup.getLoc(), "out of range pc-relative
> fixup value");
> +    if (Ctx && ARM_AM::getSOImmVal(Value) == -1) {
> +      Ctx->reportError(Fixup.getLoc(), "out of range pc-relative fixup
> value");
> +      return 0;
> +    }
>      // Encode the immediate and shift the opcode into place.
>      return ARM_AM::getSOImmVal(Value) | (opc << 21);
>    }
> @@ -544,8 +548,10 @@ unsigned ARMAsmBackend::adjustFixupValue
>      // could have an error on our hands.
>      if (Ctx && !STI->getFeatureBits()[ARM::FeatureThumb2] && IsResolved) {
>        const char *FixupDiagnostic = reasonForFixupRelaxation(Fixup,
> Value);
> -      if (FixupDiagnostic)
> -        Ctx->reportFatalError(Fixup.getLoc(), FixupDiagnostic);
> +      if (FixupDiagnostic) {
> +        Ctx->reportError(Fixup.getLoc(), FixupDiagnostic);
> +        return 0;
> +      }
>      }
>      // Offset by 4, and don't encode the low two bits.
>      return ((Value - 4) >> 2) & 0xff;
> @@ -559,16 +565,20 @@ unsigned ARMAsmBackend::adjustFixupValue
>      // Offset by 4 and don't encode the lower bit, which is always 0.
>      if (Ctx && !STI->getFeatureBits()[ARM::FeatureThumb2]) {
>        const char *FixupDiagnostic = reasonForFixupRelaxation(Fixup,
> Value);
> -      if (FixupDiagnostic)
> -        Ctx->reportFatalError(Fixup.getLoc(), FixupDiagnostic);
> +      if (FixupDiagnostic) {
> +        Ctx->reportError(Fixup.getLoc(), FixupDiagnostic);
> +        return 0;
> +      }
>      }
>      return ((Value - 4) >> 1) & 0x7ff;
>    case ARM::fixup_arm_thumb_bcc:
>      // Offset by 4 and don't encode the lower bit, which is always 0.
>      if (Ctx && !STI->getFeatureBits()[ARM::FeatureThumb2]) {
>        const char *FixupDiagnostic = reasonForFixupRelaxation(Fixup,
> Value);
> -      if (FixupDiagnostic)
> -        Ctx->reportFatalError(Fixup.getLoc(), FixupDiagnostic);
> +      if (FixupDiagnostic) {
> +        Ctx->reportError(Fixup.getLoc(), FixupDiagnostic);
> +        return 0;
> +      }
>      }
>      return ((Value - 4) >> 1) & 0xff;
>    case ARM::fixup_arm_pcrel_10_unscaled: {
> @@ -580,8 +590,10 @@ unsigned ARMAsmBackend::adjustFixupValue
>        isAdd = false;
>      }
>      // The value has the low 4 bits encoded in [3:0] and the high 4 in
> [11:8].
> -    if (Ctx && Value >= 256)
> -      Ctx->reportFatalError(Fixup.getLoc(), "out of range pc-relative
> fixup value");
> +    if (Ctx && Value >= 256) {
> +      Ctx->reportError(Fixup.getLoc(), "out of range pc-relative fixup
> value");
> +      return 0;
> +    }
>      Value = (Value & 0xf) | ((Value & 0xf0) << 4);
>      return Value | (isAdd << 23);
>    }
> @@ -599,8 +611,10 @@ unsigned ARMAsmBackend::adjustFixupValue
>      }
>      // These values don't encode the low two bits since they're always
> zero.
>      Value >>= 2;
> -    if (Ctx && Value >= 256)
> -      Ctx->reportFatalError(Fixup.getLoc(), "out of range pc-relative
> fixup value");
> +    if (Ctx && Value >= 256) {
> +      Ctx->reportError(Fixup.getLoc(), "out of range pc-relative fixup
> value");
> +      return 0;
> +    }
>      Value |= isAdd << 23;
>
>      // Same addressing mode as fixup_arm_pcrel_10, but with 16-bit
> halfwords
>
> Modified: llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp Tue Nov 17
> 04:00:43 2015
> @@ -509,8 +509,10 @@ public:
>    /// necessary.
>    void EmitValueImpl(const MCExpr *Value, unsigned Size, SMLoc Loc)
> override {
>      if (const MCSymbolRefExpr *SRE =
> dyn_cast_or_null<MCSymbolRefExpr>(Value))
> -      if (SRE->getKind() == MCSymbolRefExpr::VK_ARM_SBREL && !(Size == 4))
> -        getContext().reportFatalError(Loc, "relocated expression must be
> 32-bit");
> +      if (SRE->getKind() == MCSymbolRefExpr::VK_ARM_SBREL && !(Size ==
> 4)) {
> +        getContext().reportError(Loc, "relocated expression must be
> 32-bit");
> +        return;
> +      }
>
>      EmitDataMappingSymbol();
>      MCELFStreamer::EmitValueImpl(Value, Size, Loc);
>
> Modified: llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMMachObjectWriter.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMMachObjectWriter.cpp?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMMachObjectWriter.cpp
> (original)
> +++ llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMMachObjectWriter.cpp Tue Nov
> 17 04:00:43 2015
> @@ -150,10 +150,12 @@ RecordARMScatteredHalfRelocation(MachObj
>    // See <reloc.h>.
>    const MCSymbol *A = &Target.getSymA()->getSymbol();
>
> -  if (!A->getFragment())
> -    Asm.getContext().reportFatalError(Fixup.getLoc(),
> +  if (!A->getFragment()) {
> +    Asm.getContext().reportError(Fixup.getLoc(),
>                         "symbol '" + A->getName() +
>                         "' can not be undefined in a subtraction
> expression");
> +    return;
> +  }
>
>    uint32_t Value = Writer->getSymbolAddress(*A, Layout);
>    uint32_t Value2 = 0;
> @@ -163,10 +165,12 @@ RecordARMScatteredHalfRelocation(MachObj
>    if (const MCSymbolRefExpr *B = Target.getSymB()) {
>      const MCSymbol *SB = &B->getSymbol();
>
> -    if (!SB->getFragment())
> -      Asm.getContext().reportFatalError(Fixup.getLoc(),
> +    if (!SB->getFragment()) {
> +      Asm.getContext().reportError(Fixup.getLoc(),
>                           "symbol '" + B->getSymbol().getName() +
>                           "' can not be undefined in a subtraction
> expression");
> +      return;
> +    }
>
>      // Select the appropriate difference relocation type.
>      Type = MachO::ARM_RELOC_HALF_SECTDIFF;
> @@ -251,10 +255,12 @@ void ARMMachObjectWriter::RecordARMScatt
>    // See <reloc.h>.
>    const MCSymbol *A = &Target.getSymA()->getSymbol();
>
> -  if (!A->getFragment())
> -    Asm.getContext().reportFatalError(Fixup.getLoc(),
> +  if (!A->getFragment()) {
> +    Asm.getContext().reportError(Fixup.getLoc(),
>                         "symbol '" + A->getName() +
>                         "' can not be undefined in a subtraction
> expression");
> +    return;
> +  }
>
>    uint32_t Value = Writer->getSymbolAddress(*A, Layout);
>    uint64_t SecAddr =
> Writer->getSectionAddress(A->getFragment()->getParent());
> @@ -265,10 +271,12 @@ void ARMMachObjectWriter::RecordARMScatt
>      assert(Type == MachO::ARM_RELOC_VANILLA && "invalid reloc for 2
> symbols");
>      const MCSymbol *SB = &B->getSymbol();
>
> -    if (!SB->getFragment())
> -      Asm.getContext().reportFatalError(Fixup.getLoc(),
> +    if (!SB->getFragment()) {
> +      Asm.getContext().reportError(Fixup.getLoc(),
>                           "symbol '" + B->getSymbol().getName() +
>                           "' can not be undefined in a subtraction
> expression");
> +      return;
> +    }
>
>      // Select the appropriate difference relocation type.
>      Type = MachO::ARM_RELOC_SECTDIFF;
> @@ -346,13 +354,15 @@ void ARMMachObjectWriter::recordRelocati
>    unsigned IsPCRel = Writer->isFixupKindPCRel(Asm, Fixup.getKind());
>    unsigned Log2Size;
>    unsigned RelocType = MachO::ARM_RELOC_VANILLA;
> -  if (!getARMFixupKindMachOInfo(Fixup.getKind(), RelocType, Log2Size))
> +  if (!getARMFixupKindMachOInfo(Fixup.getKind(), RelocType, Log2Size)) {
>      // If we failed to get fixup kind info, it's because there's no legal
>      // relocation type for the fixup kind. This happens when it's a fixup
> that's
>      // expected to always be resolvable at assembly time and not have any
>      // relocations needed.
> -    Asm.getContext().reportFatalError(Fixup.getLoc(),
> -                                "unsupported relocation on symbol");
> +    Asm.getContext().reportError(Fixup.getLoc(),
> +                                 "unsupported relocation on symbol");
> +    return;
> +  }
>
>    // If this is a difference or a defined symbol plus an offset, then we
> need a
>    // scattered relocation entry.  Differences always require scattered
>
> Modified: llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp (original)
> +++ llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp Tue Nov 17
> 04:00:43 2015
> @@ -63,15 +63,19 @@ static unsigned adjustFixupValue(const M
>      // address range. Forcing a signed division because Value can be
> negative.
>      Value = (int64_t)Value / 4;
>      // We now check if Value can be encoded as a 16-bit signed immediate.
> -    if (!isInt<16>(Value) && Ctx)
> -      Ctx->reportFatalError(Fixup.getLoc(), "out of range PC16 fixup");
> +    if (!isInt<16>(Value) && Ctx) {
> +      Ctx->reportError(Fixup.getLoc(), "out of range PC16 fixup");
> +      return 0;
> +    }
>      break;
>    case Mips::fixup_MIPS_PC19_S2:
>      // Forcing a signed division because Value can be negative.
>      Value = (int64_t)Value / 4;
>      // We now check if Value can be encoded as a 19-bit signed immediate.
> -    if (!isInt<19>(Value) && Ctx)
> -      Ctx->reportFatalError(Fixup.getLoc(), "out of range PC19 fixup");
> +    if (!isInt<19>(Value) && Ctx) {
> +      Ctx->reportError(Fixup.getLoc(), "out of range PC19 fixup");
> +      return 0;
> +    }
>      break;
>    case Mips::fixup_Mips_26:
>      // So far we are only using this type for jumps.
> @@ -104,45 +108,57 @@ static unsigned adjustFixupValue(const M
>      // Forcing a signed division because Value can be negative.
>      Value = (int64_t) Value / 2;
>      // We now check if Value can be encoded as a 7-bit signed immediate.
> -    if (!isInt<7>(Value) && Ctx)
> -      Ctx->reportFatalError(Fixup.getLoc(), "out of range PC7 fixup");
> +    if (!isInt<7>(Value) && Ctx) {
> +      Ctx->reportError(Fixup.getLoc(), "out of range PC7 fixup");
> +      return 0;
> +    }
>      break;
>    case Mips::fixup_MICROMIPS_PC10_S1:
>      Value -= 2;
>      // Forcing a signed division because Value can be negative.
>      Value = (int64_t) Value / 2;
>      // We now check if Value can be encoded as a 10-bit signed immediate.
> -    if (!isInt<10>(Value) && Ctx)
> -      Ctx->reportFatalError(Fixup.getLoc(), "out of range PC10 fixup");
> +    if (!isInt<10>(Value) && Ctx) {
> +      Ctx->reportError(Fixup.getLoc(), "out of range PC10 fixup");
> +      return 0;
> +    }
>      break;
>    case Mips::fixup_MICROMIPS_PC16_S1:
>      Value -= 4;
>      // Forcing a signed division because Value can be negative.
>      Value = (int64_t)Value / 2;
>      // We now check if Value can be encoded as a 16-bit signed immediate.
> -    if (!isInt<16>(Value) && Ctx)
> -      Ctx->reportFatalError(Fixup.getLoc(), "out of range PC16 fixup");
> +    if (!isInt<16>(Value) && Ctx) {
> +      Ctx->reportError(Fixup.getLoc(), "out of range PC16 fixup");
> +      return 0;
> +    }
>      break;
>    case Mips::fixup_MIPS_PC18_S3:
>      // Forcing a signed division because Value can be negative.
>      Value = (int64_t)Value / 8;
>      // We now check if Value can be encoded as a 18-bit signed immediate.
> -    if (!isInt<18>(Value) && Ctx)
> -      Ctx->reportFatalError(Fixup.getLoc(), "out of range PC18 fixup");
> +    if (!isInt<18>(Value) && Ctx) {
> +      Ctx->reportError(Fixup.getLoc(), "out of range PC18 fixup");
> +      return 0;
> +    }
>      break;
>    case Mips::fixup_MIPS_PC21_S2:
>      // Forcing a signed division because Value can be negative.
>      Value = (int64_t) Value / 4;
>      // We now check if Value can be encoded as a 21-bit signed immediate.
> -    if (!isInt<21>(Value) && Ctx)
> -      Ctx->reportFatalError(Fixup.getLoc(), "out of range PC21 fixup");
> +    if (!isInt<21>(Value) && Ctx) {
> +      Ctx->reportError(Fixup.getLoc(), "out of range PC21 fixup");
> +      return 0;
> +    }
>      break;
>    case Mips::fixup_MIPS_PC26_S2:
>      // Forcing a signed division because Value can be negative.
>      Value = (int64_t) Value / 4;
>      // We now check if Value can be encoded as a 26-bit signed immediate.
> -    if (!isInt<26>(Value) && Ctx)
> -      Ctx->reportFatalError(Fixup.getLoc(), "out of range PC26 fixup");
> +    if (!isInt<26>(Value) && Ctx) {
> +      Ctx->reportError(Fixup.getLoc(), "out of range PC26 fixup");
> +      return 0;
> +    }
>      break;
>    }
>
>
> Modified:
> llvm/trunk/lib/Target/PowerPC/MCTargetDesc/PPCMachObjectWriter.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/MCTargetDesc/PPCMachObjectWriter.cpp?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/PowerPC/MCTargetDesc/PPCMachObjectWriter.cpp
> (original)
> +++ llvm/trunk/lib/Target/PowerPC/MCTargetDesc/PPCMachObjectWriter.cpp Tue
> Nov 17 04:00:43 2015
> @@ -241,12 +241,12 @@ bool PPCMachObjectWriter::recordScattere
>      if (FixupOffset > 0xffffff) {
>        char Buffer[32];
>        format("0x%x", FixupOffset).print(Buffer, sizeof(Buffer));
> -      Asm.getContext().reportFatalError(Fixup.getLoc(),
> +      Asm.getContext().reportError(Fixup.getLoc(),
>                                    Twine("Section too large, can't encode "
>                                          "r_address (") +
>                                        Buffer + ") into 24 bits of
> scattered "
>                                                 "relocation entry.");
> -      llvm_unreachable("fatal error returned?!");
> +      return false;
>      }
>
>      // Is this supposed to follow
> MCTarget/PPCAsmBackend.cpp:adjustFixupValue()?
>
> Modified: llvm/trunk/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp
> (original)
> +++ llvm/trunk/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp Tue Nov
> 17 04:00:43 2015
> @@ -175,9 +175,10 @@ void X86MachObjectWriter::RecordX86_64Re
>      // non-relocatable expression.
>      if (A->isUndefined() || B->isUndefined()) {
>        StringRef Name = A->isUndefined() ? A->getName() : B->getName();
> -      Asm.getContext().reportFatalError(Fixup.getLoc(),
> +      Asm.getContext().reportError(Fixup.getLoc(),
>          "unsupported relocation with subtraction expression, symbol '" +
>          Name + "' can not be undefined in a subtraction expression");
> +      return;
>      }
>
>      Value += Writer->getSymbolAddress(*A, Layout) -
> @@ -387,12 +388,12 @@ bool X86MachObjectWriter::recordScattere
>      if (FixupOffset > 0xffffff) {
>        char Buffer[32];
>        format("0x%x", FixupOffset).print(Buffer, sizeof(Buffer));
> -      Asm.getContext().reportFatalError(Fixup.getLoc(),
> +      Asm.getContext().reportError(Fixup.getLoc(),
>                           Twine("Section too large, can't encode "
>                                  "r_address (") + Buffer +
>                           ") into 24 bits of scattered "
>                           "relocation entry.");
> -      llvm_unreachable("fatal error returned?!");
> +      return false;
>      }
>
>      MachO::any_relocation_info MRE;
>
> Modified: llvm/trunk/test/MC/AArch64/error-location.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/error-location.s?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/MC/AArch64/error-location.s (original)
> +++ llvm/trunk/test/MC/AArch64/error-location.s Tue Nov 17 04:00:43 2015
> @@ -1,5 +1,49 @@
>  // RUN: not llvm-mc -triple aarch64--none-eabi -filetype obj < %s -o
> /dev/null 2>&1 | FileCheck %s
>
> +// Note: These errors are not always emitted in the order in which the
> relevant
> +// source appears, this file is carefully ordered so that that is the
> case.
> +
>    .text
>  // CHECK: :[[@LINE+1]]:{{[0-9]+}}: error: symbol 'undef' can not be
> undefined in a subtraction expression
>    .word (0-undef)
> +
> +// CHECK: :[[@LINE+1]]:{{[0-9]+}}: error: expected relocatable expression
> +  .word -undef
> +
> +// CHECK: :[[@LINE+1]]:{{[0-9]+}}: error: No relocation available to
> represent this relative expression
> +  adr x0, #a-undef
> +
> +// CHECK: :[[@LINE+1]]:{{[0-9]+}}: error: Cannot represent a difference
> across sections
> +  .word x_a - y_a
> +
> +// CHECK: :[[@LINE+1]]:{{[0-9]+}}: error: Cannot represent a subtraction
> with a weak symbol
> +  .word a - w
> +
> +// CHECK: <unknown>:0: error: expression could not be evaluated
> +  .set v1, -undef
> +
> +  .comm common, 4
> +// CHECK: <unknown>:0: error: Common symbol 'common' cannot be used in
> assignment expr
> +  .set v3, common
> +
> +// CHECK: <unknown>:0: error: Undefined temporary symbol
> +  .word 5f
> +
> +// CHECK: <unknown>:0: error: symbol 'undef' could not be evaluated in a
> subtraction expression
> +  .set v2, a-undef
> +
> +
> +
> +w:
> +  .word 0
> +  .weak w
> +
> +
> +  .section sec_x
> +x_a:
> +  .word 0
> +
> +
> +  .section sec_y
> +y_a:
> +  .word 0
>
> Modified: llvm/trunk/test/MC/ARM/arm-elf-relocation-diagnostics.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/arm-elf-relocation-diagnostics.s?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/MC/ARM/arm-elf-relocation-diagnostics.s (original)
> +++ llvm/trunk/test/MC/ARM/arm-elf-relocation-diagnostics.s Tue Nov 17
> 04:00:43 2015
> @@ -8,20 +8,19 @@
>  @ CHECK: .byte target(sbrel)
>  @ CHECK:       ^
>
> -@ TODO: enable these negative test cases
> -@      .hword target(sbrel)
> -@ @ CHECK-SBREL-HWORD: error: relocated expression must be 32-bit
> -@ @ CHECK-SBREL-HWORD: .hword target(sbrel)
> -@ @ CHECK-SBREL-HWORD:        ^
> -@
> -@      .short target(sbrel)
> -@ @ CHECK-SBREL-SHORT: error: relocated expression must be 32-bit
> -@ @ CHECK-SBREL-SHORT: .short target(sbrel)
> -@ @ CHECK-SBREL-SHORT:        ^
> -@
> -@      .quad target(sbrel)
> -@ @ CHECK-SBREL-SHORT: error: relocated expression must be 32-bit
> -@ @ CHECK-SBREL-SHORT: .quad target(sbrel)
> -@ @ CHECK-SBREL-SHORT:        ^
> +       .hword target(sbrel)
> +@ CHECK: error: relocated expression must be 32-bit
> +@ CHECK: .hword target(sbrel)
> +@ CHECK:        ^
> +
> +       .short target(sbrel)
> +@ CHECK: error: relocated expression must be 32-bit
> +@ CHECK: .short target(sbrel)
> +@ CHECK:        ^
> +
> +       .quad target(sbrel)
> +@ CHECK: error: relocated expression must be 32-bit
> +@ CHECK: .quad target(sbrel)
> +@ CHECK:        ^
>
>
>
> Modified: llvm/trunk/test/MC/ARM/error-location.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/error-location.s?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/MC/ARM/error-location.s (original)
> +++ llvm/trunk/test/MC/ARM/error-location.s Tue Nov 17 04:00:43 2015
> @@ -1,5 +1,49 @@
>  @ RUN: not llvm-mc -triple armv7a--none-eabi -filetype obj < %s -o
> /dev/null 2>&1 | FileCheck %s
>
> +@ Note: These errors are not always emitted in the order in which the
> relevant
> +@ source appears, this file is carefully ordered so that that is the case.
> +
>    .text
>  @ CHECK: :[[@LINE+1]]:{{[0-9]+}}: error: symbol 'undef' can not be
> undefined in a subtraction expression
>    .word (0-undef)
> +
> +@ CHECK: :[[@LINE+1]]:{{[0-9]+}}: error: expected relocatable expression
> +  .word -undef
> +
> +@ CHECK: :[[@LINE+1]]:{{[0-9]+}}: error: No relocation available to
> represent this relative expression
> +  adr r0, #a-undef
> +
> +@ CHECK: :[[@LINE+1]]:{{[0-9]+}}: error: Cannot represent a difference
> across sections
> +  .word x_a - y_a
> +
> +@ CHECK: :[[@LINE+1]]:{{[0-9]+}}: error: Cannot represent a subtraction
> with a weak symbol
> +  .word a - w
> +
> +@ CHECK: <unknown>:0: error: expression could not be evaluated
> +  .set v1, -undef
> +
> +  .comm common, 4
> +@ CHECK: <unknown>:0: error: Common symbol 'common' cannot be used in
> assignment expr
> +  .set v3, common
> +
> +@ CHECK: <unknown>:0: error: Undefined temporary symbol
> +  .word 5f
> +
> +@ CHECK: <unknown>:0: error: symbol 'undef' could not be evaluated in a
> subtraction expression
> +  .set v2, a-undef
> +
> +
> +
> +w:
> +  .word 0
> +  .weak w
> +
> +
> +  .section sec_x
> +x_a:
> +  .word 0
> +
> +
> +  .section sec_y
> +y_a:
> +  .word 0
>
> Removed: llvm/trunk/test/MC/ARM/thumb1-relax-adr-local.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/thumb1-relax-adr-local.s?rev=253327&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/MC/ARM/thumb1-relax-adr-local.s (original)
> +++ llvm/trunk/test/MC/ARM/thumb1-relax-adr-local.s (removed)
> @@ -1,9 +0,0 @@
> -@ RUN: not llvm-mc -triple thumbv6m-none-macho -filetype=obj -o /dev/null
> %s 2>&1 | FileCheck --check-prefix=CHECK-ERROR %s
> -
> -        .global func1
> -        adr r0, Lmisaligned
> -Lmisaligned:
> -        .word 42
> -
> -@ CHECK-ERROR: misaligned pc-relative fixup value
> -
>
> Removed: llvm/trunk/test/MC/ARM/thumb1-relax-bcc-local.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/thumb1-relax-bcc-local.s?rev=253327&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/MC/ARM/thumb1-relax-bcc-local.s (original)
> +++ llvm/trunk/test/MC/ARM/thumb1-relax-bcc-local.s (removed)
> @@ -1,6 +0,0 @@
> -@ RUN: not llvm-mc -triple thumbv6m-none-macho -filetype=obj -o /dev/null
> %s 2>&1 | FileCheck --check-prefix=CHECK-ERROR %s
> -
> -        bne Lfar
> -        .space 258
> -Lfar:
> -@ CHECK-ERROR: out of range pc-relative fixup value
>
> Removed: llvm/trunk/test/MC/ARM/thumb1-relax-br-local.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/thumb1-relax-br-local.s?rev=253327&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/MC/ARM/thumb1-relax-br-local.s (original)
> +++ llvm/trunk/test/MC/ARM/thumb1-relax-br-local.s (removed)
> @@ -1,8 +0,0 @@
> -@ RUN: not llvm-mc -triple thumbv6m-none-macho -filetype=obj -o /dev/null
> %s 2>&1 | FileCheck --check-prefix=CHECK-ERROR %s
> -
> -        b Lfar
> -        .space 2050
> -
> -Lfar:
> -
> -@ CHECK-ERROR: out of range pc-relative fixup value
>
> Removed: llvm/trunk/test/MC/ARM/thumb1-relax-ldrlit-local-behind.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/thumb1-relax-ldrlit-local-behind.s?rev=253327&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/MC/ARM/thumb1-relax-ldrlit-local-behind.s (original)
> +++ llvm/trunk/test/MC/ARM/thumb1-relax-ldrlit-local-behind.s (removed)
> @@ -1,7 +0,0 @@
> -@ RUN: not llvm-mc -triple thumbv6m-none-macho -filetype=obj -o /dev/null
> %s 2>&1 | FileCheck --check-prefix=CHECK-ERROR %s
> -
> -Lhere:
> -        ldr r0, Lhere
> -
> -@ CHECK-ERROR: out of range pc-relative fixup value
> -
>
> Removed: llvm/trunk/test/MC/ARM/thumb1-relax-ldrlit-local-misaligned.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/thumb1-relax-ldrlit-local-misaligned.s?rev=253327&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/MC/ARM/thumb1-relax-ldrlit-local-misaligned.s
> (original)
> +++ llvm/trunk/test/MC/ARM/thumb1-relax-ldrlit-local-misaligned.s (removed)
> @@ -1,10 +0,0 @@
> -@ RUN: not llvm-mc -triple thumbv6m-none-macho -filetype=obj -o /dev/null
> %s 2>&1 | FileCheck --check-prefix=CHECK-ERROR %s
> -
> -        .global func1
> -_func1:
> -        ldr r0, L_misaligned
> -L_misaligned:
> -        .word 42
> -
> -@ CHECK-ERROR: misaligned pc-relative fixup value
> -
>
> Removed: llvm/trunk/test/MC/ARM/thumb1-relax-ldrlit-local-range.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/thumb1-relax-ldrlit-local-range.s?rev=253327&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/MC/ARM/thumb1-relax-ldrlit-local-range.s (original)
> +++ llvm/trunk/test/MC/ARM/thumb1-relax-ldrlit-local-range.s (removed)
> @@ -1,13 +0,0 @@
> -@ RUN: not llvm-mc -triple thumbv6m-none-macho -filetype=obj -o /dev/null
> %s 2>&1 | FileCheck --check-prefix=CHECK-ERROR %s
> -
> -        .global func1
> -_func1:
> -        ldr r0, L_far
> -        .space 1024
> -
> -        .p2align 2
> -L_far:
> -        .word 42
> -
> -@ CHECK-ERROR: out of range pc-relative fixup value
> -
>
> Added: llvm/trunk/test/MC/ARM/thumb1-relax.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/thumb1-relax.s?rev=253328&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/MC/ARM/thumb1-relax.s (added)
> +++ llvm/trunk/test/MC/ARM/thumb1-relax.s Tue Nov 17 04:00:43 2015
> @@ -0,0 +1,35 @@
> +@ RUN: not llvm-mc -triple thumbv6m-none-macho -filetype=obj -o /dev/null
> %s 2>&1 | FileCheck %s
> +@ RUN: not llvm-mc -triple thumbv6m-none-eabi -filetype=obj -o /dev/null
> %s 2>&1 | FileCheck %s
> +
> +Lhere:
> +@ CHECK: out of range pc-relative fixup value
> +  ldr r0, Lhere
> +
> +@ CHECK: out of range pc-relative fixup value
> +  b Lfar2
> +
> +@ CHECK: out of range pc-relative fixup value
> +  bne Lfar1
> +
> +@ CHECK: out of range pc-relative fixup value
> +  ldr r0, Lfar2
> +
> +@ CHECK: misaligned pc-relative fixup value
> +  adr r0, Lmisaligned
> +
> +@ CHECK: misaligned pc-relative fixup value
> +  ldr r0, Lmisaligned
> +
> +  .balign 4
> +  .short 0
> +Lmisaligned:
> +  .word 42
> +
> +  .space 256
> +Lfar1:
> +  .word 42
> +
> +  .space 2050
> +Lfar2:
> +  .word 42
> +
>
> Modified: llvm/trunk/test/MC/COFF/bad-expr.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/COFF/bad-expr.s?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/MC/COFF/bad-expr.s (original)
> +++ llvm/trunk/test/MC/COFF/bad-expr.s Tue Nov 17 04:00:43 2015
> @@ -1,7 +1,9 @@
>  // RUN: not llvm-mc -filetype=obj -triple i386-pc-win32 %s 2>&1 |
> FileCheck %s
>
>  // CHECK: symbol '__ImageBase' can not be undefined in a subtraction
> expression
> +// CHECK: symbol '__ImageBase' can not be undefined in a subtraction
> expression
>
>          .data
>  _x:
>          .long   _x-__ImageBase
> +        .long   __ImageBase-_x
>
> Modified: llvm/trunk/test/MC/COFF/invalid-def.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/COFF/invalid-def.s?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/MC/COFF/invalid-def.s (original)
> +++ llvm/trunk/test/MC/COFF/invalid-def.s Tue Nov 17 04:00:43 2015
> @@ -1,5 +1,8 @@
> -# RUN: not llvm-mc -triple i686-windows -filetype obj -o /dev/null %s
> +# RUN: not llvm-mc -triple i686-windows -filetype obj -o /dev/null %s
> 2>&1 | FileCheck %s
>
> +# CHECK: error: starting a new symbol definition without completing the
> previous one
> +# CHECK: error: starting a new symbol definition without completing the
> previous one
>         .def first
>         .def second
> +       .def third
>
>
> Modified: llvm/trunk/test/MC/COFF/invalid-endef.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/COFF/invalid-endef.s?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/MC/COFF/invalid-endef.s (original)
> +++ llvm/trunk/test/MC/COFF/invalid-endef.s Tue Nov 17 04:00:43 2015
> @@ -1,4 +1,7 @@
> -# RUN: not llvm-mc -triple i686-windows -filetype obj -o /dev/null %s
> +# RUN: not llvm-mc -triple i686-windows -filetype obj -o /dev/null %s
> 2>&1 | FileCheck %s
>
> +# CHECK: ending symbol definition without starting one
> +# CHECK: ending symbol definition without starting one
> +       .endef
>         .endef
>
>
> Modified: llvm/trunk/test/MC/COFF/invalid-scl-range.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/COFF/invalid-scl-range.s?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/MC/COFF/invalid-scl-range.s (original)
> +++ llvm/trunk/test/MC/COFF/invalid-scl-range.s Tue Nov 17 04:00:43 2015
> @@ -1,6 +1,9 @@
>  # RUN: not llvm-mc -triple i686-windows -filetype obj -o /dev/null %s
>
>         .def storage_class_range
> +# CHECK: storage class value '1337' out of range
> +# CHECK: storage class value '9001' out of range
>                 .scl 1337
> +               .scl 9001
>         .endef
>
>
> Modified: llvm/trunk/test/MC/COFF/invalid-scl.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/COFF/invalid-scl.s?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/MC/COFF/invalid-scl.s (original)
> +++ llvm/trunk/test/MC/COFF/invalid-scl.s Tue Nov 17 04:00:43 2015
> @@ -1,4 +1,7 @@
> -# RUN: not llvm-mc -triple i686-windows -filetype obj -o /dev/null %s
> +# RUN: not llvm-mc -triple i686-windows -filetype obj -o /dev/null %s
> 2>&1 | FileCheck %s
>
> +# CHECK: storage class specified outside of symbol definition
> +# CHECK: storage class specified outside of symbol definition
> +       .scl 1337
>         .scl 1337
>
>
> Modified: llvm/trunk/test/MC/COFF/invalid-type.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/COFF/invalid-type.s?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/MC/COFF/invalid-type.s (original)
> +++ llvm/trunk/test/MC/COFF/invalid-type.s Tue Nov 17 04:00:43 2015
> @@ -1,4 +1,7 @@
> -# RUN: not llvm-mc -triple i686-windows -filetype obj -o /dev/null %s
> +# RUN: not llvm-mc -triple i686-windows -filetype obj -o /dev/null %s
> 2>&1 | FileCheck %s
>
> +# CHECK: symbol type specified outside of a symbol definition
> +# CHECK: symbol type specified outside of a symbol definition
>         .type 65536
> +       .type 65537
>
>
> Modified: llvm/trunk/test/MC/COFF/label-undefined.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/COFF/label-undefined.s?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/MC/COFF/label-undefined.s (original)
> +++ llvm/trunk/test/MC/COFF/label-undefined.s Tue Nov 17 04:00:43 2015
> @@ -1,4 +1,6 @@
>  // RUN: not llvm-mc -filetype=obj -triple i386-pc-win32 %s 2>&1 |
> FileCheck %s
>  // CHECK: assembler label 'Lundefined' can not be undefined
> +// CHECK: assembler label 'Lundefined2' can not be undefined
>          .text
>          movl Lundefined, %eax
> +        movl Lundefined2, %eax
>
> Modified: llvm/trunk/test/MC/COFF/secidx-diagnostic.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/COFF/secidx-diagnostic.s?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/MC/COFF/secidx-diagnostic.s (original)
> +++ llvm/trunk/test/MC/COFF/secidx-diagnostic.s Tue Nov 17 04:00:43 2015
> @@ -2,7 +2,9 @@
>  // RUN: FileCheck %s < %t
>
>  // CHECK: symbol 'bar' can not be undefined
> +// CHECK: symbol 'baz' can not be undefined
>
>  .data
>  foo:
>          .secidx bar
> +        .secidx baz
>
> Modified: llvm/trunk/test/MC/ELF/common-error1.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/common-error1.s?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/MC/ELF/common-error1.s (original)
> +++ llvm/trunk/test/MC/ELF/common-error1.s Tue Nov 17 04:00:43 2015
> @@ -3,4 +3,4 @@
>          .comm   C,4,4
>          .set    A,C
>
> -// CHECK: Common symbol C cannot be used in assignment expr
> +// CHECK: Common symbol 'C' cannot be used in assignment expr
>
> Modified: llvm/trunk/test/MC/ELF/common-error2.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/common-error2.s?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/MC/ELF/common-error2.s (original)
> +++ llvm/trunk/test/MC/ELF/common-error2.s Tue Nov 17 04:00:43 2015
> @@ -3,4 +3,4 @@
>          .set    A,C
>          .comm   C,4,4
>
> -// CHECK: Common symbol C cannot be used in assignment expr
> +// CHECK: Common symbol 'C' cannot be used in assignment expr
>
> Added: llvm/trunk/test/MC/MachO/AArch64/reloc-errors.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/MachO/AArch64/reloc-errors.s?rev=253328&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/MC/MachO/AArch64/reloc-errors.s (added)
> +++ llvm/trunk/test/MC/MachO/AArch64/reloc-errors.s Tue Nov 17 04:00:43
> 2015
> @@ -0,0 +1,10 @@
> +; RUN: not llvm-mc -triple aarch64-none-macho %s -filetype=obj -o - 2>&1
> | FileCheck %s
> +
> +; CHECK: error: conditional branch requires assembler-local label.
> 'external' is external.
> +  b.eq external
> +
> +; CHECK: error: Invalid relocation on conditional branch
> +  tbz w0, #4, external
> +
> +; CHECK: error: unknown AArch64 fixup kind!
> +  adr x0, external
>
> Modified: llvm/trunk/test/MC/MachO/ARM/bad-darwin-ARM-reloc.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/MachO/ARM/bad-darwin-ARM-reloc.s?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/MC/MachO/ARM/bad-darwin-ARM-reloc.s (original)
> +++ llvm/trunk/test/MC/MachO/ARM/bad-darwin-ARM-reloc.s Tue Nov 17
> 04:00:43 2015
> @@ -7,3 +7,9 @@
>  L___fcommon:
>      .word 0
>  @ CHECK-ERROR: unsupported relocation on symbol
> +
> +c:
> +  .word a - b
> +@ CHECK-ERROR: symbol 'a' can not be undefined in a subtraction expression
> +  .word c - b
> +@ CHECK-ERROR: symbol 'b' can not be undefined in a subtraction expression
>
> Modified: llvm/trunk/test/MC/MachO/bad-darwin-x86_64-diff-relocs.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/MachO/bad-darwin-x86_64-diff-relocs.s?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/MC/MachO/bad-darwin-x86_64-diff-relocs.s (original)
> +++ llvm/trunk/test/MC/MachO/bad-darwin-x86_64-diff-relocs.s Tue Nov 17
> 04:00:43 2015
> @@ -2,4 +2,12 @@
>  // RUN: FileCheck --check-prefix=CHECK-ERROR < %t.err %s
>
>  .quad _foo - _bar
> -// CHECK-ERROR: unsupported relocation with subtraction expression
> +// CHECK-ERROR: error: unsupported relocation with subtraction expression
> +
> +_Y:
> +.long (_Y+4)-_b
> +// CHECK-ERROR: error: unsupported relocation with subtraction
> expression, symbol '_b' can not be undefined in a subtraction expression
> +
> +_Z:
> +.long (_a+4)-_Z
> +// CHECK-ERROR: error: unsupported relocation with subtraction
> expression, symbol '_a' can not be undefined in a subtraction expression
>
> Removed: llvm/trunk/test/MC/MachO/bad-darwin-x86_64-reloc-expr1.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/MachO/bad-darwin-x86_64-reloc-expr1.s?rev=253327&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/MC/MachO/bad-darwin-x86_64-reloc-expr1.s (original)
> +++ llvm/trunk/test/MC/MachO/bad-darwin-x86_64-reloc-expr1.s (removed)
> @@ -1,6 +0,0 @@
> -// RUN: not llvm-mc -triple x86_64-apple-darwin10 %s -filetype=obj -o -
> 2> %t.err > %t
> -// RUN: FileCheck --check-prefix=CHECK-ERROR < %t.err %s
> -
> -_Z:
> -.long (_Z+4)-_b
> -// CHECK-ERROR: error: unsupported relocation with subtraction
> expression, symbol '_b' can not be undefined in a subtraction expression
>
> Removed: llvm/trunk/test/MC/MachO/bad-darwin-x86_64-reloc-expr2.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/MachO/bad-darwin-x86_64-reloc-expr2.s?rev=253327&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/MC/MachO/bad-darwin-x86_64-reloc-expr2.s (original)
> +++ llvm/trunk/test/MC/MachO/bad-darwin-x86_64-reloc-expr2.s (removed)
> @@ -1,6 +0,0 @@
> -// RUN: not llvm-mc -triple x86_64-apple-darwin10 %s -filetype=obj -o -
> 2> %t.err > %t
> -// RUN: FileCheck --check-prefix=CHECK-ERROR < %t.err %s
> -
> -_Z:
> -.long (_a+4)-_Z
> -// CHECK-ERROR: error: unsupported relocation with subtraction
> expression, symbol '_a' can not be undefined in a subtraction expression
>
> Modified: llvm/trunk/test/MC/Mips/micromips-diagnostic-fixup.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Mips/micromips-diagnostic-fixup.s?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/MC/Mips/micromips-diagnostic-fixup.s (original)
> +++ llvm/trunk/test/MC/Mips/micromips-diagnostic-fixup.s Tue Nov 17
> 04:00:43 2015
> @@ -1,9 +1,12 @@
>  # RUN: not llvm-mc %s -triple=mipsel-unknown-linux -mcpu=mips32r2
> -arch=mips -mattr=+micromips 2>&1 -filetype=obj | FileCheck %s
> -#
> +
> +# Two instructions, to check that this is not a fatal error
> +# CHECK: error: out of range PC16 fixup
>  # CHECK: error: out of range PC16 fixup
>
>  .text
>    b foo
> +  b foo
>    .space 65536 - 6, 1   # -6 = size of b instr plus size of automatically
> inserted nop
>    nop                   # This instr makes the branch too long to fit
> into a 17-bit offset
>  foo:
>
> Modified: llvm/trunk/test/MC/Mips/micromips-pc16-fixup.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Mips/micromips-pc16-fixup.s?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/MC/Mips/micromips-pc16-fixup.s (original)
> +++ llvm/trunk/test/MC/Mips/micromips-pc16-fixup.s Tue Nov 17 04:00:43 2015
> @@ -1,6 +1,6 @@
>  # RUN: llvm-mc %s -triple=mips-unknown-linux -mcpu=mips32r2 -arch=mips
> -mattr=+micromips 2>&1 -filetype=obj | FileCheck %s
>  #
> -# CHECK-NOT: LLVM ERROR: out of range PC16 fixup
> +# CHECK-NOT: error: out of range PC16 fixup
>
>  .text
>    b foo
>
> Modified: llvm/trunk/test/MC/Mips/mips-diagnostic-fixup.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Mips/mips-diagnostic-fixup.s?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/MC/Mips/mips-diagnostic-fixup.s (original)
> +++ llvm/trunk/test/MC/Mips/mips-diagnostic-fixup.s Tue Nov 17 04:00:43
> 2015
> @@ -1,9 +1,12 @@
>  # RUN: not llvm-mc %s -triple=mipsel-unknown-linux -mcpu=mips32r2
> -arch=mips 2>&1 -filetype=obj | FileCheck %s
> -#
> +
> +# Two instructions, to check that this is not a fatal error
> +# CHECK: error: out of range PC16 fixup
>  # CHECK: error: out of range PC16 fixup
>
>  .text
>    b foo
> +  b foo
>    .space 131072 - 8, 1  # -8 = size of b instr plus size of automatically
> inserted nop
>    nop                   # This instr makes the branch too long to fit
> into a 18-bit offset
>  foo:
>
> Modified: llvm/trunk/test/MC/Mips/mips-pc16-fixup.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Mips/mips-pc16-fixup.s?rev=253328&r1=253327&r2=253328&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/MC/Mips/mips-pc16-fixup.s (original)
> +++ llvm/trunk/test/MC/Mips/mips-pc16-fixup.s Tue Nov 17 04:00:43 2015
> @@ -1,6 +1,6 @@
>  # RUN: llvm-mc %s -triple=mips-unknown-linux -mcpu=mips32r2 -arch=mips
> 2>&1 -filetype=obj | FileCheck %s
>  #
> -# CHECK-NOT: LLVM ERROR: out of range PC16 fixup
> +# CHECK-NOT: error: out of range PC16 fixup
>
>  .text
>    b foo
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151118/f9c044e5/attachment-0001.html>


More information about the llvm-commits mailing list