diff options
author | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2019-02-14 09:27:29 +0100 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2019-02-14 10:00:23 +0000 |
commit | 25487daffd54bb73e59fc4aa1414beac5b7ed93b (patch) | |
tree | 8639ddbe28707ab4ce143902b301e98f980361da | |
parent | e8a511f313422602626edc86d7669603fc52ea51 (diff) | |
download | qt-creator-25487daffd54bb73e59fc4aa1414beac5b7ed93b.tar.gz |
C++: Fix nullptr references in preprocessor
Fixes: QTCREATORBUG-21981
Change-Id: Iaded998eb793fb4284a9f8b22b2fa7a7443a1585
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
-rw-r--r-- | src/libs/cplusplus/pp-engine.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/libs/cplusplus/pp-engine.cpp b/src/libs/cplusplus/pp-engine.cpp index 0050a2fd84..50dbb7c140 100644 --- a/src/libs/cplusplus/pp-engine.cpp +++ b/src/libs/cplusplus/pp-engine.cpp @@ -764,7 +764,7 @@ QByteArray Preprocessor::run(const QString &fileName, preprocessed.reserve(source.size() * 2); // multiply by 2 because we insert #gen lines. preprocess(fileName, source, &preprocessed, &includeGuardMacroName, noLines, markGeneratedTokens, false); - if (!includeGuardMacroName.isEmpty()) + if (m_client && !includeGuardMacroName.isEmpty()) m_client->markAsIncludeGuard(includeGuardMacroName); return preprocessed; } @@ -986,10 +986,12 @@ bool Preprocessor::handleIdentifier(PPToken *tk) if (!expandFunctionlikeMacros() // Still expand if this originally started with an object-like macro. && m_state.m_expansionStatus != Expanding) { - m_client->notifyMacroReference(m_state.m_bytesOffsetRef + idTk.byteOffset, - m_state.m_utf16charsOffsetRef + idTk.utf16charOffset, - idTk.lineno, - *macro); + if (m_client) { + m_client->notifyMacroReference(m_state.m_bytesOffsetRef + idTk.byteOffset, + m_state.m_utf16charsOffsetRef + idTk.utf16charOffset, + idTk.lineno, + *macro); + } return false; } @@ -1793,7 +1795,7 @@ void Preprocessor::handleDefineDirective(PPToken *tk) } } } else if (macroReference) { - if (tk->is(T_LPAREN)) { + if (m_client && tk->is(T_LPAREN)) { m_client->notifyMacroReference(previousBytesOffset, previousUtf16charsOffset, previousLine, *macroReference); } |