diff --git a/src/libs/cplusplus/pp-engine.cpp b/src/libs/cplusplus/pp-engine.cpp
index 6e85fe95a57fb477e70e525d66669294652d3a44..0ba1d8459fda72a217aaa92fa59edf97fde5e4ee 100644
--- a/src/libs/cplusplus/pp-engine.cpp
+++ b/src/libs/cplusplus/pp-engine.cpp
@@ -1202,16 +1202,13 @@ void Preprocessor::trackExpansionCycles(PPToken *tk)
             } else if (m_state.m_expansionStatus == Expanding) {
                 m_state.m_expansionStatus = JustFinishedExpansion;
 
-                QByteArray *buffer = currentOutputBuffer();
-                if (!buffer)
-                    return;
-
+                QByteArray &buffer = currentOutputBuffer();
                 maybeStartOutputLine();
 
                 // Offset and length of the macro invocation
                 char chunk[40];
                 qsnprintf(chunk, sizeof(chunk), "# expansion begin %d,%d", tk->offset, tk->length());
-                buffer->append(chunk);
+                buffer.append(chunk);
 
                 // Expanded tokens
                 unsigned generatedCount = 0;
@@ -1220,23 +1217,23 @@ void Preprocessor::trackExpansionCycles(PPToken *tk)
                     if (p.first) {
                         if (generatedCount) {
                             qsnprintf(chunk, sizeof(chunk), " ~%d", generatedCount);
-                            buffer->append(chunk);
+                            buffer.append(chunk);
                             generatedCount = 0;
                         }
                         qsnprintf(chunk, sizeof(chunk), " %d:%d", p.first, p.second);
-                        buffer->append(chunk);
+                        buffer.append(chunk);
                     } else {
                         ++generatedCount;
                     }
                 }
                 if (generatedCount) {
                     qsnprintf(chunk, sizeof(chunk), " ~%d", generatedCount);
-                    buffer->append(chunk);
+                    buffer.append(chunk);
                 }
-                buffer->append('\n');
-                buffer->append(m_state.m_expansionResult);
+                buffer.append('\n');
+                buffer.append(m_state.m_expansionResult);
                 maybeStartOutputLine();
-                buffer->append("# expansion end\n");
+                buffer.append("# expansion end\n");
             }
 
             lex(tk);
@@ -1279,16 +1276,14 @@ void Preprocessor::synchronizeOutputLines(const PPToken &tk, bool forceLine)
 
 void Preprocessor::removeTrailingOutputLines()
 {
-    QByteArray *buffer = currentOutputBuffer();
-    if (buffer) {
-        int i = buffer->size() - 1;
-        while (i >= 0 && buffer->at(i) == '\n')
-            --i;
-        const int mightChop = buffer->size() - i - 1;
-        if (mightChop > 1) {
-            // Keep one new line at end.
-            buffer->chop(mightChop - 1);
-        }
+    QByteArray &buffer = currentOutputBuffer();
+    int i = buffer.size() - 1;
+    while (i >= 0 && buffer.at(i) == '\n')
+        --i;
+    const int mightChop = buffer.size() - i - 1;
+    if (mightChop > 1) {
+        // Keep one new line at end.
+        buffer.chop(mightChop - 1);
     }
 }
 
@@ -2044,40 +2039,37 @@ void Preprocessor::startSkippingBlocks(const Preprocessor::PPToken &tk) const
 template <class T>
 void Preprocessor::writeOutput(const T &t)
 {
-    QByteArray *buffer = currentOutputBuffer();
-    if (buffer)
-        buffer->append(t);
+    currentOutputBuffer().append(t);
 }
 
 void Preprocessor::writeOutput(const ByteArrayRef &ref)
 {
-    QByteArray *buffer = currentOutputBuffer();
-    if (buffer)
-        buffer->append(ref.start(), ref.length());
+    currentOutputBuffer().append(ref.start(), ref.length());
 }
 
 bool Preprocessor::atStartOfOutputLine() const
 {
-    const QByteArray *buffer = currentOutputBuffer();
-    return (buffer && !buffer->isEmpty()) ? *(buffer->end() - 1) == '\n' : true;
+    const QByteArray &buffer = currentOutputBuffer();
+    return buffer.isEmpty() || buffer.endsWith('\n');
 }
 
 void Preprocessor::maybeStartOutputLine()
 {
-    QByteArray *buffer = currentOutputBuffer();
-    if (buffer && !buffer->isEmpty() && *(buffer->end() - 1) != '\n')
+    QByteArray &buffer = currentOutputBuffer();
+    if (!buffer.isEmpty() && !buffer.endsWith('\n'))
         writeOutput('\n');
 }
 
-const QByteArray *Preprocessor::currentOutputBuffer() const
+const QByteArray &Preprocessor::currentOutputBuffer() const
 {
     if (m_state.m_expansionStatus == Expanding)
-        return &m_state.m_expansionResult;
-
-    return m_state.m_result;
+        return m_state.m_expansionResult;
+    return *m_state.m_result;
 }
 
-QByteArray *Preprocessor::currentOutputBuffer()
+QByteArray &Preprocessor::currentOutputBuffer()
 {
-    return const_cast<QByteArray *>(static_cast<const Preprocessor *>(this)->currentOutputBuffer());
+    if (m_state.m_expansionStatus == Expanding)
+        return m_state.m_expansionResult;
+    return *m_state.m_result;
 }
diff --git a/src/libs/cplusplus/pp-engine.h b/src/libs/cplusplus/pp-engine.h
index d95effba9c150dd325afd36bd7dbab129990cf11..7d04849168d38ed5b836c5dcaffc10b97d21e15e 100644
--- a/src/libs/cplusplus/pp-engine.h
+++ b/src/libs/cplusplus/pp-engine.h
@@ -236,8 +236,8 @@ private:
     void synchronizeOutputLines(const PPToken &tk, bool forceLine = false);
     void removeTrailingOutputLines();
 
-    const QByteArray *currentOutputBuffer() const;
-    QByteArray *currentOutputBuffer();
+    const QByteArray &currentOutputBuffer() const;
+    QByteArray &currentOutputBuffer();
 
     void enforceSpacing(const PPToken &tk, bool forceSpacing = false);
     static std::size_t computeDistance(const PPToken &tk, bool forceTillLine = false);