diff --git a/src/plugins/projectexplorer/clangparser.cpp b/src/plugins/projectexplorer/clangparser.cpp
index eab8e37d4952039cbba26a923ed7aa0017b02495..971697f222fb4c4e22f361589d3bb614bb151f6f 100644
--- a/src/plugins/projectexplorer/clangparser.cpp
+++ b/src/plugins/projectexplorer/clangparser.cpp
@@ -33,10 +33,8 @@
 
 using namespace ProjectExplorer;
 
-namespace {
-    // opt. drive letter + filename: (2 brackets)
-    const char * const FILE_PATTERN = "(<command line>|([A-Za-z]:)?[^:]+\\.[^:]+)";
-}
+// opt. drive letter + filename: (2 brackets)
+static const char * const FILE_PATTERN = "(<command line>|([A-Za-z]:)?[^:]+\\.[^:]+)";
 
 ClangParser::ClangParser() :
     m_commandRegExp(QLatin1String("^clang(\\+\\+)?: +(fatal +)?(warning|error|note): (.*)$")),
@@ -57,7 +55,7 @@ ClangParser::~ClangParser()
 
 void ClangParser::stdError(const QString &line)
 {
-    const QString lne = line.left(line.count() - 1);
+    const QString lne = rightTrimmed(line);
     if (m_summaryRegExp.indexIn(lne) > -1) {
         emitTask();
         m_expectSnippet = false;
diff --git a/src/plugins/projectexplorer/gccparser.cpp b/src/plugins/projectexplorer/gccparser.cpp
index ca88c95410e5f93228dc18c30cc8ef6966dd49b4..cf0350ccedfabe6f7bb59690a3b27a802b119939 100644
--- a/src/plugins/projectexplorer/gccparser.cpp
+++ b/src/plugins/projectexplorer/gccparser.cpp
@@ -62,7 +62,7 @@ GccParser::GccParser()
 
 void GccParser::stdError(const QString &line)
 {
-    QString lne = line.trimmed();
+    QString lne = rightTrimmed(line);
 
     // Blacklist some lines to not handle them:
     if (lne.startsWith(QLatin1String("TeamBuilder ")) ||
@@ -117,7 +117,7 @@ void GccParser::stdError(const QString &line)
         return;
     } else if (m_regExpIncluded.indexIn(lne) > -1) {
         emit addTask(Task(Task::Unknown,
-                          lne /* description */,
+                          lne.trimmed() /* description */,
                           Utils::FileName::fromUserInput(m_regExpIncluded.cap(1)) /* filename */,
                           m_regExpIncluded.cap(3).toInt() /* linenumber */,
                           Core::Id(Constants::TASK_CATEGORY_COMPILE)));
diff --git a/src/plugins/projectexplorer/gnumakeparser.cpp b/src/plugins/projectexplorer/gnumakeparser.cpp
index c090de9c9ab427818fc41333cdebfbb00d92e459..37ca5b380a7371c0625b0b77eef5b595d9ef2556 100644
--- a/src/plugins/projectexplorer/gnumakeparser.cpp
+++ b/src/plugins/projectexplorer/gnumakeparser.cpp
@@ -69,7 +69,7 @@ bool GnuMakeParser::hasFatalErrors() const
 
 void GnuMakeParser::stdOutput(const QString &line)
 {
-    QString lne = line.trimmed();
+    const QString lne = rightTrimmed(line);
 
     if (m_makeDir.indexIn(lne) > -1) {
         if (m_makeDir.cap(7) == QLatin1String("Leaving"))
@@ -84,7 +84,7 @@ void GnuMakeParser::stdOutput(const QString &line)
 
 void GnuMakeParser::stdError(const QString &line)
 {
-    QString lne = line.trimmed();
+    const QString lne = rightTrimmed(line);
 
     if (m_makefileError.indexIn(lne) > -1) {
         ++m_fatalErrorCount;
diff --git a/src/plugins/projectexplorer/ioutputparser.cpp b/src/plugins/projectexplorer/ioutputparser.cpp
index d21056e0596e69f9399ec86507cb8c6254bd33b4..b996a560fb2febea5955f189614523af40b06414 100644
--- a/src/plugins/projectexplorer/ioutputparser.cpp
+++ b/src/plugins/projectexplorer/ioutputparser.cpp
@@ -191,4 +191,14 @@ void IOutputParser::setWorkingDirectory(const QString &workingDirectory)
         m_parser->setWorkingDirectory(workingDirectory);
 }
 
+QString IOutputParser::rightTrimmed(const QString &in)
+{
+    int pos = in.length();
+    for (; pos > 0; --pos) {
+        if (!in.at(pos - 1).isSpace())
+            break;
+    }
+    return in.mid(0, pos);
+}
+
 }
diff --git a/src/plugins/projectexplorer/ioutputparser.h b/src/plugins/projectexplorer/ioutputparser.h
index f2b4bcf3f4d73478e126e32206315e2f4afb405e..53200c1be3fb5a80e530e2a6d06c84a996ee8f3c 100644
--- a/src/plugins/projectexplorer/ioutputparser.h
+++ b/src/plugins/projectexplorer/ioutputparser.h
@@ -60,6 +60,8 @@ public:
     // For GnuMakeParser
     virtual void setWorkingDirectory(const QString &workingDirectory);
 
+    static QString rightTrimmed(const QString &in);
+
 signals:
     void addOutput(const QString &string, ProjectExplorer::BuildStep::OutputFormat format);
     void addTask(const ProjectExplorer::Task &task);
diff --git a/src/plugins/projectexplorer/ldparser.cpp b/src/plugins/projectexplorer/ldparser.cpp
index 500c8d3237f8468279f2b98ccedc994576e9e2e1..a75188e790eb8b7600c3c6ae685719ca77050a0f 100644
--- a/src/plugins/projectexplorer/ldparser.cpp
+++ b/src/plugins/projectexplorer/ldparser.cpp
@@ -57,7 +57,7 @@ LdParser::LdParser()
 
 void LdParser::stdError(const QString &line)
 {
-    QString lne = line.trimmed();
+    QString lne = rightTrimmed(line);
     if (lne.startsWith(QLatin1String("TeamBuilder "))
             || lne.startsWith(QLatin1String("distcc["))
             || lne.contains(QLatin1String("ar: creating "))) {
diff --git a/src/plugins/qt4projectmanager/qmakeparser.cpp b/src/plugins/qt4projectmanager/qmakeparser.cpp
index 37dfaf3557cf38f3ca07c94e620337db92e6a622..ba15f6ab23916c7566213ae96bd370d7c1a405b7 100644
--- a/src/plugins/qt4projectmanager/qmakeparser.cpp
+++ b/src/plugins/qt4projectmanager/qmakeparser.cpp
@@ -44,7 +44,7 @@ QMakeParser::QMakeParser() : m_error(QLatin1String("^(.+):(\\d+):\\s(.+)$"))
 
 void QMakeParser::stdError(const QString &line)
 {
-    QString lne(line.trimmed());
+    QString lne = rightTrimmed(line);
     if (lne.startsWith(QLatin1String("Project ERROR:"))) {
         const QString description = lne.mid(15);
         emit addTask(Task(Task::Error,
diff --git a/src/plugins/qtsupport/qtparser.cpp b/src/plugins/qtsupport/qtparser.cpp
index 3a56dc21ec3b67d275b3d6de4b64d161066b6ddc..3e64cc4efc9f438101a3a1daacf902079fab8c80 100644
--- a/src/plugins/qtsupport/qtparser.cpp
+++ b/src/plugins/qtsupport/qtparser.cpp
@@ -47,7 +47,7 @@ QtParser::QtParser() :
 
 void QtParser::stdError(const QString &line)
 {
-    QString lne(line.trimmed());
+    QString lne = rightTrimmed(line);
     if (m_mocRegExp.indexIn(lne) > -1) {
         bool ok;
         int lineno = m_mocRegExp.cap(3).toInt(&ok);