Skip to content

Commit

Permalink
[ELF] - Remove ScriptLexer::Error field and check ErrorCount instead.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
George Rimar committed Aug 4, 2017
1 parent d6bcde3 commit ce60808
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 27 deletions.
13 changes: 6 additions & 7 deletions lld/ELF/ScriptLexer.cpp
Expand Up @@ -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);
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -207,7 +206,7 @@ static std::vector<StringRef> 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<StringRef> V = tokenizeExpr(Tokens[Pos]);
Expand All @@ -220,7 +219,7 @@ void ScriptLexer::maybeSplitExpr() {
StringRef ScriptLexer::next() {
maybeSplitExpr();

if (Error)
if (ErrorCount)
return "";
if (atEOF()) {
setError("unexpected EOF");
Expand All @@ -231,7 +230,7 @@ StringRef ScriptLexer::next() {

StringRef ScriptLexer::peek() {
StringRef Tok = next();
if (Error)
if (ErrorCount)
return "";
Pos = Pos - 1;
return Tok;
Expand Down Expand Up @@ -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)
Expand Down
1 change: 0 additions & 1 deletion lld/ELF/ScriptLexer.h
Expand Up @@ -39,7 +39,6 @@ class ScriptLexer {
std::vector<StringRef> Tokens;
bool InExpr = false;
size_t Pos = 0;
bool Error = false;

private:
void maybeSplitExpr();
Expand Down
36 changes: 18 additions & 18 deletions lld/ELF/ScriptParser.cpp
Expand Up @@ -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 "
Expand Down Expand Up @@ -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;
}
Expand All @@ -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
Expand Down Expand Up @@ -345,7 +345,7 @@ void ScriptParser::readOutput() {
void ScriptParser::readOutputArch() {
// OUTPUT_ARCH is ignored for now.
expect("(");
while (!Error && !consume(")"))
while (!ErrorCount && !consume(")"))
skip();
}

Expand All @@ -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"))
Expand Down Expand Up @@ -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) {
Expand All @@ -428,7 +428,7 @@ static int precedence(StringRef Op) {

StringMatcher ScriptParser::readFilePatterns() {
std::vector<StringRef> V;
while (!Error && !consume(")"))
while (!ErrorCount && !consume(")"))
V.push_back(next());
return StringMatcher(V);
}
Expand Down Expand Up @@ -460,15 +460,15 @@ SortSectionPolicy ScriptParser::readSortKind() {
// any file but a.o, and section .baz in any file but b.o.
std::vector<SectionPattern> ScriptParser::readInputSectionsList() {
std::vector<SectionPattern> Ret;
while (!Error && peek() != ")") {
while (!ErrorCount && peek() != ")") {
StringMatcher ExcludeFilePat;
if (consume("EXCLUDE_FILE")) {
expect("(");
ExcludeFilePat = readFilePatterns();
}

std::vector<StringRef> V;
while (!Error && peek() != ")" && peek() != "EXCLUDE_FILE")
while (!ErrorCount && peek() != ")" && peek() != "EXCLUDE_FILE")
V.push_back(next());

if (!V.empty())
Expand All @@ -495,7 +495,7 @@ ScriptParser::readInputSectionRules(StringRef FilePattern) {
auto *Cmd = make<InputSectionDescription>(FilePattern);
expect("(");

while (!Error && !consume(")")) {
while (!ErrorCount && !consume(")")) {
SortSectionPolicy Outer = readSortKind();
SortSectionPolicy Inner = SortSectionPolicy::Default;
std::vector<SectionPattern> V;
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -1033,7 +1033,7 @@ Expr ScriptParser::readParenExpr() {

std::vector<StringRef> ScriptParser::readOutputSectionPhdrs() {
std::vector<StringRef> Phdrs;
while (!Error && peek().startswith(":")) {
while (!ErrorCount && peek().startswith(":")) {
StringRef Tok = next();
Phdrs.push_back((Tok.size() == 1) ? next() : Tok.substr(1));
}
Expand Down Expand Up @@ -1136,7 +1136,7 @@ ScriptParser::readSymbols() {
std::vector<SymbolVersion> Globals;
std::vector<SymbolVersion> *V = &Globals;

while (!Error) {
while (!ErrorCount) {
if (consume("}"))
break;
if (consumeLabel("local")) {
Expand Down Expand Up @@ -1170,7 +1170,7 @@ std::vector<SymbolVersion> ScriptParser::readVersionExtern() {
expect("{");

std::vector<SymbolVersion> Ret;
while (!Error && peek() != "}") {
while (!ErrorCount && peek() != "}") {
StringRef Tok = next();
bool HasWildcard = !Tok.startswith("\"") && hasWildcard(Tok);
Ret.push_back({unquote(Tok), IsCXX, HasWildcard});
Expand All @@ -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;
Expand Down
1 change: 0 additions & 1 deletion lld/test/ELF/version-script-err.s
Expand Up @@ -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

0 comments on commit ce60808

Please sign in to comment.