diff options
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/include/llvm/MC/MCContext.h | 6 | ||||
-rw-r--r-- | llvm/lib/MC/MCContext.cpp | 22 | ||||
-rw-r--r-- | llvm/lib/MC/MCParser/AsmParser.cpp | 2 | ||||
-rw-r--r-- | llvm/test/MC/Mips/micromips-diagnostic-fixup.s | 2 | ||||
-rw-r--r-- | llvm/test/MC/Mips/mips-diagnostic-fixup.s | 2 |
5 files changed, 25 insertions, 9 deletions
diff --git a/llvm/include/llvm/MC/MCContext.h b/llvm/include/llvm/MC/MCContext.h index c675c8623df..db2afa50b66 100644 --- a/llvm/include/llvm/MC/MCContext.h +++ b/llvm/include/llvm/MC/MCContext.h @@ -213,6 +213,8 @@ namespace llvm { /// Do automatic reset in destructor bool AutoReset; + bool HadError; + MCSymbol *createSymbolImpl(const StringMapEntry<bool> *Name, bool CanBeUnnamed); MCSymbol *createSymbol(StringRef Name, bool AlwaysAddSuffix, @@ -514,11 +516,13 @@ namespace llvm { } void deallocate(void *Ptr) {} + bool hadError() { return HadError; } + void reportError(SMLoc L, const Twine &Msg); // Unrecoverable error has occurred. Display the best diagnostic we can // and bail via exit(1). For now, most MC backend errors are unrecoverable. // FIXME: We should really do something about that. LLVM_ATTRIBUTE_NORETURN void reportFatalError(SMLoc L, - const Twine &Msg) const; + const Twine &Msg); }; } // end namespace llvm diff --git a/llvm/lib/MC/MCContext.cpp b/llvm/lib/MC/MCContext.cpp index 93c7aaf36ee..383540a7a8f 100644 --- a/llvm/lib/MC/MCContext.cpp +++ b/llvm/lib/MC/MCContext.cpp @@ -42,7 +42,7 @@ MCContext::MCContext(const MCAsmInfo *mai, const MCRegisterInfo *mri, CurrentDwarfLoc(0, 0, 0, DWARF2_FLAG_IS_STMT, 0, 0), DwarfLocSeen(false), GenDwarfForAssembly(false), GenDwarfFileNumber(0), DwarfVersion(4), AllowTemporaryLabels(true), DwarfCompileUnitID(0), - AutoReset(DoAutoReset) { + AutoReset(DoAutoReset), HadError(false) { std::error_code EC = llvm::sys::fs::current_path(CompilationDir); if (EC) @@ -102,6 +102,8 @@ void MCContext::reset() { DwarfLocSeen = false; GenDwarfForAssembly = false; GenDwarfFileNumber = 0; + + HadError = false; } //===----------------------------------------------------------------------===// @@ -475,14 +477,24 @@ void MCContext::finalizeDwarfSections(MCStreamer &MCOS) { [&](MCSection *Sec) { return !MCOS.mayHaveInstructions(*Sec); }); } -void MCContext::reportFatalError(SMLoc Loc, const Twine &Msg) const { - // If we have a source manager and a location, use it. Otherwise just - // use the generic report_fatal_error(). - if (!SrcMgr || Loc == SMLoc()) +//===----------------------------------------------------------------------===// +// Error Reporting +//===----------------------------------------------------------------------===// + +void MCContext::reportError(SMLoc Loc, const Twine &Msg) { + HadError = true; + + // If we have a source manager use it. Otherwise just use the generic + // report_fatal_error(). + if (!SrcMgr) report_fatal_error(Msg, false); // Use the source manager to print the message. SrcMgr->PrintMessage(Loc, SourceMgr::DK_Error, Msg); +} + +void MCContext::reportFatalError(SMLoc Loc, const Twine &Msg) { + reportError(Loc, Msg); // If we reached here, we are failing ungracefully. Run the interrupt handlers // to make sure any special cleanups get done, in particular that we remove diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp index dd0e6bde9d8..8e8be8e52f6 100644 --- a/llvm/lib/MC/MCParser/AsmParser.cpp +++ b/llvm/lib/MC/MCParser/AsmParser.cpp @@ -703,7 +703,7 @@ bool AsmParser::Run(bool NoInitialTextSection, bool NoFinalize) { if (!HadError && !NoFinalize) Out.Finish(); - return HadError; + return HadError || getContext().hadError(); } void AsmParser::checkForValidSection() { diff --git a/llvm/test/MC/Mips/micromips-diagnostic-fixup.s b/llvm/test/MC/Mips/micromips-diagnostic-fixup.s index 041338ac2d3..6300561cd10 100644 --- a/llvm/test/MC/Mips/micromips-diagnostic-fixup.s +++ b/llvm/test/MC/Mips/micromips-diagnostic-fixup.s @@ -1,6 +1,6 @@ # RUN: not llvm-mc %s -triple=mipsel-unknown-linux -mcpu=mips32r2 -arch=mips -mattr=+micromips 2>&1 -filetype=obj | FileCheck %s # -# CHECK: LLVM ERROR: out of range PC16 fixup +# CHECK: error: out of range PC16 fixup .text b foo diff --git a/llvm/test/MC/Mips/mips-diagnostic-fixup.s b/llvm/test/MC/Mips/mips-diagnostic-fixup.s index 864d7397271..6c74c134a9e 100644 --- a/llvm/test/MC/Mips/mips-diagnostic-fixup.s +++ b/llvm/test/MC/Mips/mips-diagnostic-fixup.s @@ -1,6 +1,6 @@ # RUN: not llvm-mc %s -triple=mipsel-unknown-linux -mcpu=mips32r2 -arch=mips 2>&1 -filetype=obj | FileCheck %s # -# CHECK: LLVM ERROR: out of range PC16 fixup +# CHECK: error: out of range PC16 fixup .text b foo |