From: George Rimar Date: Fri, 4 Aug 2017 10:34:14 +0000 (+0000) Subject: [ELF] - Remove ScriptLexer::Error field and check ErrorCount instead. X-Git-Tag: llvmorg-6.0.0-rc1~10911 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ce6080819ce8fe0f9cd77f327814574eb68c0d49;p=platform%2Fupstream%2Fllvm.git [ELF] - Remove ScriptLexer::Error field and check ErrorCount instead. D35945 introduces change when there is useless to check Error flag in few places, but ErrorCount must be checked instead. But then we probably can just check ErrorCount always. That should simplify things. Patch do that. Differential revision: https://reviews.llvm.org/D36266 llvm-svn: 310046 --- diff --git a/lld/ELF/ScriptLexer.cpp b/lld/ELF/ScriptLexer.cpp index 86720de..8514c25 100644 --- a/lld/ELF/ScriptLexer.cpp +++ b/lld/ELF/ScriptLexer.cpp @@ -75,9 +75,8 @@ ScriptLexer::ScriptLexer(MemoryBufferRef MB) { tokenize(MB); } // We don't want to record cascading errors. Keep only the first one. void ScriptLexer::setError(const Twine &Msg) { - if (Error) + if (ErrorCount) return; - Error = true; if (!Pos) { error(getCurrentLocation() + ": " + Msg); @@ -164,7 +163,7 @@ StringRef ScriptLexer::skipSpace(StringRef S) { } // An erroneous token is handled as if it were the last token before EOF. -bool ScriptLexer::atEOF() { return Error || Tokens.size() == Pos; } +bool ScriptLexer::atEOF() { return ErrorCount || Tokens.size() == Pos; } // Split a given string as an expression. // This function returns "3", "*" and "5" for "3*5" for example. @@ -207,7 +206,7 @@ static std::vector tokenizeExpr(StringRef S) { // // This function may split the current token into multiple tokens. void ScriptLexer::maybeSplitExpr() { - if (!InExpr || Error || atEOF()) + if (!InExpr || ErrorCount || atEOF()) return; std::vector V = tokenizeExpr(Tokens[Pos]); @@ -220,7 +219,7 @@ void ScriptLexer::maybeSplitExpr() { StringRef ScriptLexer::next() { maybeSplitExpr(); - if (Error) + if (ErrorCount) return ""; if (atEOF()) { setError("unexpected EOF"); @@ -231,7 +230,7 @@ StringRef ScriptLexer::next() { StringRef ScriptLexer::peek() { StringRef Tok = next(); - if (Error) + if (ErrorCount) return ""; Pos = Pos - 1; return Tok; @@ -260,7 +259,7 @@ bool ScriptLexer::consumeLabel(StringRef Tok) { void ScriptLexer::skip() { (void)next(); } void ScriptLexer::expect(StringRef Expect) { - if (Error) + if (ErrorCount) return; StringRef Tok = next(); if (Tok != Expect) diff --git a/lld/ELF/ScriptLexer.h b/lld/ELF/ScriptLexer.h index 64d6d920..da0a5e9 100644 --- a/lld/ELF/ScriptLexer.h +++ b/lld/ELF/ScriptLexer.h @@ -39,7 +39,6 @@ public: std::vector Tokens; bool InExpr = false; size_t Pos = 0; - bool Error = false; private: void maybeSplitExpr(); diff --git a/lld/ELF/ScriptParser.cpp b/lld/ELF/ScriptParser.cpp index 226c67d..dee2a02 100644 --- a/lld/ELF/ScriptParser.cpp +++ b/lld/ELF/ScriptParser.cpp @@ -192,7 +192,7 @@ void ScriptParser::readVersionScriptCommand() { return; } - while (!atEOF() && !Error && peek() != "}") { + while (!atEOF() && !ErrorCount && peek() != "}") { StringRef VerStr = next(); if (VerStr == "{") { setError("anonymous version definition is used in " @@ -284,7 +284,7 @@ void ScriptParser::readAsNeeded() { expect("("); bool Orig = Config->AsNeeded; Config->AsNeeded = true; - while (!Error && !consume(")")) + while (!ErrorCount && !consume(")")) addFile(unquote(next())); Config->AsNeeded = Orig; } @@ -300,13 +300,13 @@ void ScriptParser::readEntry() { void ScriptParser::readExtern() { expect("("); - while (!Error && !consume(")")) + while (!ErrorCount && !consume(")")) Config->Undefined.push_back(next()); } void ScriptParser::readGroup() { expect("("); - while (!Error && !consume(")")) { + while (!ErrorCount && !consume(")")) { if (consume("AS_NEEDED")) readAsNeeded(); else @@ -345,7 +345,7 @@ void ScriptParser::readOutput() { void ScriptParser::readOutputArch() { // OUTPUT_ARCH is ignored for now. expect("("); - while (!Error && !consume(")")) + while (!ErrorCount && !consume(")")) skip(); } @@ -364,14 +364,14 @@ void ScriptParser::readOutputFormat() { void ScriptParser::readPhdrs() { expect("{"); - while (!Error && !consume("}")) { + while (!ErrorCount && !consume("}")) { Script->Opt.PhdrsCommands.push_back( {next(), PT_NULL, false, false, UINT_MAX, nullptr}); PhdrsCommand &PhdrCmd = Script->Opt.PhdrsCommands.back(); PhdrCmd.Type = readPhdrType(); - while (!Error && !consume(";")) { + while (!ErrorCount && !consume(";")) { if (consume("FILEHDR")) PhdrCmd.HasFilehdr = true; else if (consume("PHDRS")) @@ -403,7 +403,7 @@ void ScriptParser::readSections() { Config->SingleRoRx = true; expect("{"); - while (!Error && !consume("}")) { + while (!ErrorCount && !consume("}")) { StringRef Tok = next(); BaseCommand *Cmd = readProvideOrAssignment(Tok); if (!Cmd) { @@ -428,7 +428,7 @@ static int precedence(StringRef Op) { StringMatcher ScriptParser::readFilePatterns() { std::vector V; - while (!Error && !consume(")")) + while (!ErrorCount && !consume(")")) V.push_back(next()); return StringMatcher(V); } @@ -460,7 +460,7 @@ SortSectionPolicy ScriptParser::readSortKind() { // any file but a.o, and section .baz in any file but b.o. std::vector ScriptParser::readInputSectionsList() { std::vector Ret; - while (!Error && peek() != ")") { + while (!ErrorCount && peek() != ")") { StringMatcher ExcludeFilePat; if (consume("EXCLUDE_FILE")) { expect("("); @@ -468,7 +468,7 @@ std::vector ScriptParser::readInputSectionsList() { } std::vector V; - while (!Error && peek() != ")" && peek() != "EXCLUDE_FILE") + while (!ErrorCount && peek() != ")" && peek() != "EXCLUDE_FILE") V.push_back(next()); if (!V.empty()) @@ -495,7 +495,7 @@ ScriptParser::readInputSectionRules(StringRef FilePattern) { auto *Cmd = make(FilePattern); expect("("); - while (!Error && !consume(")")) { + while (!ErrorCount && !consume(")")) { SortSectionPolicy Outer = readSortKind(); SortSectionPolicy Inner = SortSectionPolicy::Default; std::vector V; @@ -625,7 +625,7 @@ OutputSection *ScriptParser::readOutputSectionDescription(StringRef OutSec) { Cmd->Constraint = ConstraintKind::ReadWrite; expect("{"); - while (!Error && !consume("}")) { + while (!ErrorCount && !consume("}")) { StringRef Tok = next(); if (Tok == ";") { // Empty commands are allowed. Do nothing here. @@ -769,7 +769,7 @@ static Expr combine(StringRef Op, Expr L, Expr R) { // This is a part of the operator-precedence parser. This function // assumes that the remaining token stream starts with an operator. Expr ScriptParser::readExpr1(Expr Lhs, int MinPrec) { - while (!atEOF() && !Error) { + while (!atEOF() && !ErrorCount) { // Read an operator and an expression. if (consume("?")) return readTernary(Lhs); @@ -1033,7 +1033,7 @@ Expr ScriptParser::readParenExpr() { std::vector ScriptParser::readOutputSectionPhdrs() { std::vector Phdrs; - while (!Error && peek().startswith(":")) { + while (!ErrorCount && peek().startswith(":")) { StringRef Tok = next(); Phdrs.push_back((Tok.size() == 1) ? next() : Tok.substr(1)); } @@ -1136,7 +1136,7 @@ ScriptParser::readSymbols() { std::vector Globals; std::vector *V = &Globals; - while (!Error) { + while (!ErrorCount) { if (consume("}")) break; if (consumeLabel("local")) { @@ -1170,7 +1170,7 @@ std::vector ScriptParser::readVersionExtern() { expect("{"); std::vector Ret; - while (!Error && peek() != "}") { + while (!ErrorCount && peek() != "}") { StringRef Tok = next(); bool HasWildcard = !Tok.startswith("\"") && hasWildcard(Tok); Ret.push_back({unquote(Tok), IsCXX, HasWildcard}); @@ -1197,7 +1197,7 @@ uint64_t ScriptParser::readMemoryAssignment(StringRef S1, StringRef S2, // MEMORY { name [(attr)] : ORIGIN = origin, LENGTH = len ... } void ScriptParser::readMemory() { expect("{"); - while (!Error && !consume("}")) { + while (!ErrorCount && !consume("}")) { StringRef Name = next(); uint32_t Flags = 0; diff --git a/lld/test/ELF/version-script-err.s b/lld/test/ELF/version-script-err.s index ea3f664..bd786d9 100644 --- a/lld/test/ELF/version-script-err.s +++ b/lld/test/ELF/version-script-err.s @@ -8,4 +8,3 @@ // RUN: not ld.lld --version-script %terr1.script -shared %t.o -o %t.so 2>&1 | \ // RUN: FileCheck -check-prefix=ERR1 %s // ERR1: {{.*}}:1: unclosed quote -// ERR1-NEXT: {{.*}}: unexpected EOF