From 5535bc04ee644a2ee2df292524445d332097392c Mon Sep 17 00:00:00 2001 From: Denis Shienkov Date: Fri, 11 Oct 2019 12:24:31 +0300 Subject: [PATCH] BareMetal: Handle warnings from BL51 linker It handles an additional linker warnings, in a form like: *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS SEGMENT: ?PR?GPIO_TASK?GPIO Change-Id: I58420ea19d4b562c0307be11808be435e02a3f27 Reviewed-by: Christian Kandeler --- src/plugins/baremetal/keilparser.cpp | 21 ++++++++++++++++++--- src/plugins/baremetal/keilparser.h | 2 +- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/plugins/baremetal/keilparser.cpp b/src/plugins/baremetal/keilparser.cpp index eefba945249..2025cb22b6b 100644 --- a/src/plugins/baremetal/keilparser.cpp +++ b/src/plugins/baremetal/keilparser.cpp @@ -164,9 +164,9 @@ bool KeilParser::parseMcs51WarningOrErrorDetailsMessage2(const QString &lne) return false; } -bool KeilParser::parseMcs51FatalErrorMessage1(const QString &lne) +bool KeilParser::parseMcs51WarningOrFatalErrorMessage(const QString &lne) { - const QRegularExpression re("^\\*{3} (FATAL ERROR) (.+)$"); + const QRegularExpression re("^\\*{3} (WARNING|FATAL ERROR) (.+)$"); const QRegularExpressionMatch match = re.match(lne); if (match.hasMatch()) { enum CaptureIndex { MessageTypeIndex = 1, MessageDescriptionIndex }; @@ -228,7 +228,7 @@ void KeilParser::stdOutput(const QString &line) const bool parsed = parseMcs51WarningOrErrorDetailsMessage1(lne) || parseMcs51WarningOrErrorDetailsMessage2(lne); if (!parsed) { - if (parseMcs51FatalErrorMessage1(lne)) + if (parseMcs51WarningOrFatalErrorMessage(lne)) return; if (parseMcs51FatalErrorMessage2(lne)) return; @@ -499,6 +499,21 @@ void BareMetalPlugin::testKeilOutputParsers_data() << QString(); // Linker messages. + QTest::newRow("MCS51: Linker warning") + << QString::fromLatin1("*** WARNING L16: Some warning\n" + " Some detail 1") + << OutputParserTester::STDOUT + << QString::fromLatin1("*** WARNING L16: Some warning\n" + " Some detail 1\n") + << QString() + << (Tasks() << Task(Task::Warning, + QLatin1String("L16: Some warning\n" + " Some detail 1"), + Utils::FilePath(), + -1, + categoryCompile)) + << QString(); + QTest::newRow("MCS51: Linker simple fatal error") << QString::fromLatin1("*** FATAL ERROR L456: Some error") << OutputParserTester::STDOUT diff --git a/src/plugins/baremetal/keilparser.h b/src/plugins/baremetal/keilparser.h index 198cfdb0cc0..b837c786364 100644 --- a/src/plugins/baremetal/keilparser.h +++ b/src/plugins/baremetal/keilparser.h @@ -52,7 +52,7 @@ private: // MCS51 compiler specific parsers. bool parseMcs51WarningOrErrorDetailsMessage1(const QString &lne); bool parseMcs51WarningOrErrorDetailsMessage2(const QString &lne); - bool parseMcs51FatalErrorMessage1(const QString &lne); + bool parseMcs51WarningOrFatalErrorMessage(const QString &lne); bool parseMcs51FatalErrorMessage2(const QString &lne); void stdError(const QString &line) final;