diff --git a/src/libs/cplusplus/pp-engine.cpp b/src/libs/cplusplus/pp-engine.cpp index 752008f32b0..d92edb2115b 100644 --- a/src/libs/cplusplus/pp-engine.cpp +++ b/src/libs/cplusplus/pp-engine.cpp @@ -1189,7 +1189,7 @@ void Preprocessor::handleDefineDirective(PPToken *tk) Macro macro; macro.setFileName(m_env->currentFile); - macro.setLine(m_env->currentLine); + macro.setLine(tk->lineno); QByteArray macroName = tk->asByteArrayRef().toByteArray(); macro.setName(macroName); macro.setOffset(tk->offset); diff --git a/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp b/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp index 91819d3175a..95e41111534 100644 --- a/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp +++ b/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp @@ -104,7 +104,11 @@ public: virtual ~MockClient() {} - virtual void macroAdded(const Macro &/*macro*/) {} + virtual void macroAdded(const Macro & macro) + { + m_definedMacros.append(macro.name()); + m_definedMacrosLine.append(macro.line()); + } virtual void passedMacroDefinitionCheck(unsigned /*offset*/, const Macro &/*macro*/) {} virtual void failedMacroDefinitionCheck(unsigned /*offset*/, const QByteArray &/*name*/) {} @@ -216,6 +220,12 @@ public: QList expandedMacrosOffset() const { return m_expandedMacrosOffset; } + QList definedMacros() const + { return m_definedMacros; } + + QList definedMacrosLine() const + { return m_definedMacrosLine; } + private: Environment *m_env; QByteArray *m_output; @@ -226,6 +236,8 @@ private: QList m_recordedIncludes; QList m_expandedMacros; QList m_expandedMacrosOffset; + QList m_definedMacros; + QList m_definedMacrosLine; }; namespace QTest { @@ -436,6 +448,8 @@ void tst_Preprocessor::macro_uses() QCOMPARE(simplified(preprocessed), QString("void test(){int x=8;int y=9;}")); QCOMPARE(client.expandedMacros(), QList() << QByteArray("FOO") << QByteArray("BAR")); QCOMPARE(client.expandedMacrosOffset(), QList() << buffer.indexOf("FOO;") << buffer.indexOf("BAR;")); + QCOMPARE(client.definedMacros(), QList() << QByteArray("FOO") << QByteArray("BAR")); + QCOMPARE(client.definedMacrosLine(), QList() << 2 << 3); } void tst_Preprocessor::macro_definition_lineno()