From: Owen Reynolds Date: Fri, 20 Sep 2019 08:10:14 +0000 (+0000) Subject: Reapply [llvm-ar] Include a line number when failing to parse an MRI script X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=25040f8dec2e2dda5b0951744f9a32fb7aab3755;p=platform%2Fupstream%2Fllvm.git Reapply [llvm-ar] Include a line number when failing to parse an MRI script Reapply r372309 Errors that occur when reading an MRI script now include a corresponding line number. Differential Revision: https://reviews.llvm.org/D67449 llvm-svn: 372374 --- diff --git a/llvm/test/Object/mri2.test b/llvm/test/Object/mri2.test index c4dadf1..2e90171 100644 --- a/llvm/test/Object/mri2.test +++ b/llvm/test/Object/mri2.test @@ -4,4 +4,4 @@ ; RUN: echo end >> %t.mri ; RUN: not llvm-ar -M < %t.mri 2>&1 | FileCheck %s -; CHECK: error: editing multiple archives not supported +; CHECK: error: script line 2: editing multiple archives not supported diff --git a/llvm/test/Object/mri3.test b/llvm/test/Object/mri3.test index 163de53..697878b 100644 --- a/llvm/test/Object/mri3.test +++ b/llvm/test/Object/mri3.test @@ -3,4 +3,4 @@ ; RUN: echo end >> %t.mri ; RUN: not llvm-ar -M < %t.mri 2>&1 | FileCheck %s -; CHECK: error: file already saved +; CHECK: error: script line 2: file already saved diff --git a/llvm/test/Object/mri4.test b/llvm/test/Object/mri4.test index 26a3733..bdca3c9 100644 --- a/llvm/test/Object/mri4.test +++ b/llvm/test/Object/mri4.test @@ -1,4 +1,4 @@ ; RUN: echo abc > %t.mri ; RUN: not llvm-ar -M < %t.mri 2>&1 | FileCheck %s -; CHECK: error: unknown command: abc +; CHECK: error: script line 1: unknown command: abc diff --git a/llvm/test/tools/llvm-ar/mri-addlib.test b/llvm/test/tools/llvm-ar/mri-addlib.test index b213fd9..ee692ea 100644 --- a/llvm/test/tools/llvm-ar/mri-addlib.test +++ b/llvm/test/tools/llvm-ar/mri-addlib.test @@ -22,10 +22,10 @@ # RUN: not llvm-ar -M < %t/badlib.mri 2>&1 | FileCheck --check-prefix=PARSE %s # RUN: not ls %t/badlib.a -# PARSE: error: could not parse library +# PARSE: error: script line 2: could not parse library ## No create command. -# RUN: echo "ADDLIB %t/f.a" > %t/nocreate.mri +# RUN: echo "ADDLIB %t/f.a" > %t/nocreate.mri # RUN: echo "SAVE" >> %t/nocreate.mri # RUN: not llvm-ar -M < %t/nocreate.mri diff --git a/llvm/test/tools/llvm-ar/mri-errors.test b/llvm/test/tools/llvm-ar/mri-errors.test new file mode 100644 index 0000000..a6980f2 --- /dev/null +++ b/llvm/test/tools/llvm-ar/mri-errors.test @@ -0,0 +1,41 @@ +## Test different MRI comment formats and whitespace. + +# RUN: rm -rf %t && mkdir -p %t + +# RUN: echo "create %t/mri.ar" > %t/script1.mri +# RUN: echo "addlib %t/missing.a" >> %t/script1.mri + +# RUN: not llvm-ar -M < %t/script1.mri 2>&1 | FileCheck --check-prefix=SCRIPT1 %s +# SCRIPT1: error: script line 2: could not open library + +# RUN: echo "create %t/mri.ar" > %t/script2.mri +# RUN: echo "addlib %t/bad.a" >> %t/script2.mri + +# RUN: echo "bad archive" > %t/bad.a + +# RUN: not llvm-ar -M < %t/script2.mri 2>&1 | FileCheck --check-prefix=SCRIPT2 %s +# SCRIPT2: error: script line 2: could not parse library + +# RUN: echo "create %t/mri.ar" > %t/script3.mri +# RUN: echo "create %t/second.ar" >> %t/script3.mri + +# RUN: not llvm-ar -M < %t/script3.mri 2>&1 | FileCheck --check-prefix=SCRIPT3 %s +# SCRIPT3: error: script line 2: editing multiple archives not supported + +# RUN: echo "save" > %t/script4.mri +# RUN: echo "create %t/mri.ar" >> %t/script4.mri + +# RUN: not llvm-ar -M < %t/script4.mri 2>&1 | FileCheck --check-prefix=SCRIPT4 %s +# SCRIPT4: error: script line 2: file already saved + +# RUN: echo "create %t/mri.ar" > %t/script5.mri +# RUN: echo "bad command" >> %t/script5.mri + +# RUN: not llvm-ar -M < %t/script5.mri 2>&1 | FileCheck --check-prefix=SCRIPT5 %s +# SCRIPT5: error: script line 2: unknown command: bad + +# RUN: echo "bad command" | not llvm-ar -M 2>&1 | FileCheck --check-prefix=SCRIPT6 %s +# SCRIPT6: error: script line 1: unknown command: bad + +# RUN: not llvm-ar -M rc %t/mri.ar 2>&1 | FileCheck --check-prefix=SCRIPT7 %s +# SCRIPT7: error: cannot mix -M and other options diff --git a/llvm/tools/llvm-ar/llvm-ar.cpp b/llvm/tools/llvm-ar/llvm-ar.cpp index 65a8619..4eb50a1 100644 --- a/llvm/tools/llvm-ar/llvm-ar.cpp +++ b/llvm/tools/llvm-ar/llvm-ar.cpp @@ -116,10 +116,19 @@ void printHelpMessage() { outs() << ArHelp; } +static unsigned MRILineNumber; +static bool ParsingMRIScript; + // Show the error message and exit. LLVM_ATTRIBUTE_NORETURN static void fail(Twine Error) { - WithColor::error(errs(), ToolName) << Error << "\n"; - printHelpMessage(); + if (ParsingMRIScript) { + WithColor::error(errs(), ToolName) + << "script line " << MRILineNumber << ": " << Error << "\n"; + } else { + WithColor::error(errs(), ToolName) << Error << "\n"; + printHelpMessage(); + } + exit(1); } @@ -958,8 +967,10 @@ static void runMRIScript() { const MemoryBuffer &Ref = *Buf.get(); bool Saved = false; std::vector NewMembers; + ParsingMRIScript = true; for (line_iterator I(Ref, /*SkipBlanks*/ false), E; I != E; ++I) { + ++MRILineNumber; StringRef Line = *I; Line = Line.split(';').first; Line = Line.split('*').first; @@ -1021,7 +1032,9 @@ static void runMRIScript() { fail("unknown command: " + CommandStr); } } - + + ParsingMRIScript = false; + // Nothing to do if not saved. if (Saved) performOperation(ReplaceOrInsert, &NewMembers);