diff --git a/src/libs/cplusplus/pp-engine.cpp b/src/libs/cplusplus/pp-engine.cpp index 83a104ba102..1748a322e68 100644 --- a/src/libs/cplusplus/pp-engine.cpp +++ b/src/libs/cplusplus/pp-engine.cpp @@ -654,12 +654,12 @@ void Preprocessor::handleDefined(PPToken *tk) break; } while (isValidToken(*tk)); - if (lparenSeen) { - while (tk->isNot(T_RPAREN)) - lex(tk); - } else { - pushToken(tk); - } + + if (lparenSeen && tk->is(T_RPAREN)) + lex(tk); + + pushToken(tk); + QByteArray result(1, '0'); if (m_env->resolve(idToken.asByteArrayRef())) result[0] = '1'; diff --git a/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp b/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp index bc669ab9b5f..e1ddc900be7 100644 --- a/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp +++ b/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp @@ -886,6 +886,26 @@ void tst_Preprocessor::defined_data() "#if X <= 0x040000\n" "#define Y 1\n" "#endif\n"; + + QTest::newRow("incomplete defined 1") << true << true << + "#define X 0x040500\n" + "#if defined(X\n" + "#define Y 1\n" + "#endif\n"; + QTest::newRow("incomplete defined 2") << false << false << + "#if defined(X\n" + "#define Y 1\n" + "#endif\n"; + QTest::newRow("complete defined 1") << true << true << + "#define X 0x040500\n" + "#if defined(X )\n" + "#define Y 1\n" + "#endif\n"; + QTest::newRow("complete defined 2") << true << true << + "#define X 0x040500\n" + "#if defined(X/*xxx*/)\n" + "#define Y 1\n" + "#endif\n"; } QTEST_APPLESS_MAIN(tst_Preprocessor)