From b65103f5632aa5a8fbd737967813281d7edcd8e3 Mon Sep 17 00:00:00 2001
From: Tobias Hunger <tobias.hunger@nokia.com>
Date: Thu, 2 Sep 2010 16:44:49 +0200
Subject: [PATCH] Flush out state of the Linux ICC parser on destruction

---
 .../projectexplorer/linuxiccparser.cpp        | 19 +++++++++++--------
 src/plugins/projectexplorer/linuxiccparser.h  |  4 +++-
 2 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/src/plugins/projectexplorer/linuxiccparser.cpp b/src/plugins/projectexplorer/linuxiccparser.cpp
index 1957b2ffb7d..3516df16612 100644
--- a/src/plugins/projectexplorer/linuxiccparser.cpp
+++ b/src/plugins/projectexplorer/linuxiccparser.cpp
@@ -36,7 +36,7 @@
 using namespace ProjectExplorer;
 
 LinuxIccParser::LinuxIccParser()
-    : m_expectFirstLine(true), m_indent(0)
+    : m_expectFirstLine(true), m_indent(0), m_temporary(Task())
 {
     // main.cpp(53): error #308: function \"AClass::privatefunc\" (declared at line 4 of \"main.h\") is inaccessible
 
@@ -59,22 +59,24 @@ LinuxIccParser::LinuxIccParser()
     appendOutputParser(new LdParser);
 }
 
+LinuxIccParser::~LinuxIccParser()
+{
+    if (!m_temporary.isNull())
+        addTask(m_temporary);
+}
+
 void LinuxIccParser::stdError(const QString &line)
 {
     if (m_expectFirstLine  && m_firstLine.indexIn(line) != -1) {
         // Clear out old task
-        m_temporary = ProjectExplorer::Task();
-        m_temporary.file = m_firstLine.cap(1);
-        m_temporary.line = m_firstLine.cap(2).toInt();
+        m_temporary = ProjectExplorer::Task(Task::Unknown, m_firstLine.cap(6).trimmed(),
+                                            m_firstLine.cap(1), m_firstLine.cap(2).toInt(),
+                                            QLatin1String(Constants::TASK_CATEGORY_COMPILE));
         QString category = m_firstLine.cap(4);
         if (category == QLatin1String("error"))
             m_temporary.type = Task::Error;
         else if (category == QLatin1String("warning"))
             m_temporary.type = Task::Warning;
-        else
-            m_temporary.type = Task::Unknown;
-        m_temporary.category = Constants::TASK_CATEGORY_COMPILE;
-        m_temporary.description = m_firstLine.cap(6).trimmed();
 
         m_expectFirstLine = false;
     } else if (!m_expectFirstLine && m_caretLine.indexIn(line) != -1) {
@@ -93,6 +95,7 @@ void LinuxIccParser::stdError(const QString &line)
     } else if (!m_expectFirstLine && line.trimmed().isEmpty()) { // last Line
         m_expectFirstLine = true;
         emit addTask(m_temporary);
+        m_temporary = Task();
     } else if (!m_expectFirstLine && m_continuationLines.indexIn(line) != -1) {
         m_temporary.description.append("\n");
         m_indent = 0;
diff --git a/src/plugins/projectexplorer/linuxiccparser.h b/src/plugins/projectexplorer/linuxiccparser.h
index b557a4ae12c..2646802fd78 100644
--- a/src/plugins/projectexplorer/linuxiccparser.h
+++ b/src/plugins/projectexplorer/linuxiccparser.h
@@ -42,7 +42,9 @@ class LinuxIccParser : public ProjectExplorer::IOutputParser
 
 public:
     LinuxIccParser();
-    virtual void stdError(const QString &line);
+    ~LinuxIccParser();
+
+    void stdError(const QString &line);
 
 private:
     QRegExp m_firstLine;
-- 
GitLab