summaryrefslogtreecommitdiff
path: root/src/plugins/baremetal
diff options
context:
space:
mode:
authorDenis Shienkov <denis.shienkov@gmail.com>2019-10-25 12:20:38 +0300
committerDenis Shienkov <denis.shienkov@gmail.com>2019-10-28 09:43:23 +0000
commit0a7b9db9b43fc1647a7d7f277c6bebafa9115e5b (patch)
tree7ed15840f185a96187e2658b4010dc58729d7f0d /src/plugins/baremetal
parent83c6a4d9220dbd1c34ec38b37139471ab279935c (diff)
downloadqt-creator-0a7b9db9b43fc1647a7d7f277c6bebafa9115e5b.tar.gz
BareMetal: Handle missed stdout error generated by IAR linker
Change-Id: I767363697dc56d9314ff6c34605a907807975864 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/plugins/baremetal')
-rw-r--r--src/plugins/baremetal/iarewparser.cpp33
-rw-r--r--src/plugins/baremetal/iarewparser.h1
2 files changed, 33 insertions, 1 deletions
diff --git a/src/plugins/baremetal/iarewparser.cpp b/src/plugins/baremetal/iarewparser.cpp
index 93e97ac056..039e32aa8d 100644
--- a/src/plugins/baremetal/iarewparser.cpp
+++ b/src/plugins/baremetal/iarewparser.cpp
@@ -179,6 +179,22 @@ bool IarParser::parseErrorInCommandLineMessage(const QString &lne)
return true;
}
+bool IarParser::parseErrorMessage1(const QString &lne)
+{
+ const QRegularExpression re("^(Error)\\[(.+)\\]:\\s(.+)$");
+ const QRegularExpressionMatch match = re.match(lne);
+ if (!match.hasMatch())
+ return false;
+ enum CaptureIndex { MessageTypeIndex = 1, MessageCodeIndex, DescriptionIndex };
+ const Task::TaskType type = taskType(match.captured(MessageTypeIndex));
+ const QString descr = QString("[%1]: %2").arg(match.captured(MessageCodeIndex),
+ match.captured(DescriptionIndex));
+ // This task has not a file path and line number (as it is a linker message)
+ const Task task(type, descr, {}, -1, Constants::TASK_CATEGORY_COMPILE);
+ newTask(task);
+ return true;
+}
+
void IarParser::stdError(const QString &line)
{
IOutputParser::stdError(line);
@@ -225,7 +241,10 @@ void IarParser::stdOutput(const QString &line)
const QString lne = rightTrimmed(line);
- if (!parseErrorInCommandLineMessage(lne))
+ // The call sequence has the meaning!
+ const bool leastOneParsed = parseErrorInCommandLineMessage(lne)
+ || parseErrorMessage1(lne);
+ if (!leastOneParsed)
return;
doFlush();
@@ -297,6 +316,18 @@ void BareMetalPlugin::testIarOutputParsers_data()
categoryCompile))
<< QString();
+ QTest::newRow("Linker error")
+ << QString::fromLatin1("Error[e46]: Some error")
+ << OutputParserTester::STDOUT
+ << QString::fromLatin1("Error[e46]: Some error\n")
+ << QString()
+ << (Tasks() << Task(Task::Error,
+ QLatin1String("[e46]: Some error"),
+ Utils::FilePath(),
+ -1,
+ categoryCompile))
+ << QString();
+
// For std error.
QTest::newRow("No details warning")
<< QString::fromLatin1("\"c:\\foo\\main.c\",63 Warning[Pe223]:\n"
diff --git a/src/plugins/baremetal/iarewparser.h b/src/plugins/baremetal/iarewparser.h
index d3fc2d1454..28cd89960f 100644
--- a/src/plugins/baremetal/iarewparser.h
+++ b/src/plugins/baremetal/iarewparser.h
@@ -50,6 +50,7 @@ private:
bool parseErrorOrFatalErrorDetailsMessage2(const QString &lne);
bool parseWarningOrErrorOrFatalErrorDetailsMessage1(const QString &lne);
bool parseErrorInCommandLineMessage(const QString &lne);
+ bool parseErrorMessage1(const QString &lne);
void stdError(const QString &line) final;
void stdOutput(const QString &line) final;