From 9196899788634a664fe6c5ff0285decce74326de Mon Sep 17 00:00:00 2001 From: Mandeep Singh Grang Date: Tue, 6 Dec 2016 02:49:17 +0000 Subject: [PATCH] [llvm] Fix D26214: Move error handling out of MC and to the callers. Summary: Related clang patch; https://reviews.llvm.org/D27360 Reviewers: t.p.northover, grosbach, compnerd, echristo Subscribers: compnerd, mehdi_amini, llvm-commits Differential Revision: https://reviews.llvm.org/D27359 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288763 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/MC/MCContext.h | 2 +- lib/MC/MCContext.cpp | 19 +++++-------------- tools/llvm-mc/llvm-mc.cpp | 17 +++++++++++++++-- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/include/llvm/MC/MCContext.h b/include/llvm/MC/MCContext.h index 2ce2780d4f2..aa302dbe0a2 100644 --- a/include/llvm/MC/MCContext.h +++ b/include/llvm/MC/MCContext.h @@ -303,7 +303,7 @@ namespace llvm { MCSymbol *lookupSymbol(const Twine &Name) const; /// Set value for a symbol. - int setSymbolValue(MCStreamer &Streamer, std::string &I); + void setSymbolValue(MCStreamer &Streamer, StringRef Sym, uint64_t Val); /// getSymbols - Get a reference for the symbol table for clients that /// want to, for example, iterate over all symbols. 'const' because we diff --git a/lib/MC/MCContext.cpp b/lib/MC/MCContext.cpp index afe8ee84918..8298aff928c 100644 --- a/lib/MC/MCContext.cpp +++ b/lib/MC/MCContext.cpp @@ -260,20 +260,11 @@ MCSymbol *MCContext::lookupSymbol(const Twine &Name) const { return Symbols.lookup(NameRef); } -int MCContext::setSymbolValue(MCStreamer &Streamer, std::string &I) { - auto Pair = StringRef(I).split('='); - if (Pair.second.empty()) { - errs() << "error: defsym must be of the form: sym=value: " << I << "\n"; - return 1; - } - int64_t Value; - if (Pair.second.getAsInteger(0, Value)) { - errs() << "error: Value is not an integer: " << Pair.second << "\n"; - return 1; - } - auto Symbol = getOrCreateSymbol(Pair.first); - Streamer.EmitAssignment(Symbol, MCConstantExpr::create(Value, *this)); - return 0; +void MCContext::setSymbolValue(MCStreamer &Streamer, + StringRef Sym, + uint64_t Val) { + auto Symbol = getOrCreateSymbol(Sym); + Streamer.EmitAssignment(Symbol, MCConstantExpr::create(Val, *this)); } //===----------------------------------------------------------------------===// diff --git a/tools/llvm-mc/llvm-mc.cpp b/tools/llvm-mc/llvm-mc.cpp index 8a904a8ad7c..497fb198776 100644 --- a/tools/llvm-mc/llvm-mc.cpp +++ b/tools/llvm-mc/llvm-mc.cpp @@ -394,9 +394,22 @@ static int AsLexInput(SourceMgr &SrcMgr, MCAsmInfo &MAI, } static int fillCommandLineSymbols(MCAsmParser &Parser) { - for (auto &I: DefineSymbol) - if (Parser.getContext().setSymbolValue(Parser.getStreamer(), I)) + for (auto &I: DefineSymbol) { + auto Pair = StringRef(I).split('='); + auto Sym = Pair.first; + auto Val = Pair.second; + + if (Sym.empty() || Val.empty()) { + errs() << "error: defsym must be of the form: sym=value: " << I << "\n"; + return 1; + } + int64_t Value; + if (Val.getAsInteger(0, Value)) { + errs() << "error: Value is not an integer: " << Val << "\n"; return 1; + } + Parser.getContext().setSymbolValue(Parser.getStreamer(), Sym, Value); + } return 0; } -- 2.11.0