diff options
author | Volodymyr Zibarov <gogan419@gmail.com> | 2020-06-12 22:42:06 +0300 |
---|---|---|
committer | Volodymyr Zibarov <gogan419@gmail.com> | 2020-06-15 10:16:06 +0000 |
commit | 7d827416023f0da42e1b476cc4f22ccadf365991 (patch) | |
tree | 1207e5a2e3227bad71a5df0fa10df4418cec62bf /tests/auto | |
parent | af9665f7850bc679a9ffbf65b6f25615a6176ab4 (diff) |
C++: Fix find usage to see Catch test functions bodies
Catch test functions defined with function-like macros.
To speed-up semantic analysis, find usages does not expand function-like
macros.
Semantic fails with "expected a function declarator" on such functions
and skips function body.
To avoid that, we create dummy function type specifically for this case
Change-Id: Ie2f2464ee57aa4dc86eed07b8b699458f95c0266
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'tests/auto')
-rw-r--r-- | tests/auto/cplusplus/findusages/tst_findusages.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/auto/cplusplus/findusages/tst_findusages.cpp b/tests/auto/cplusplus/findusages/tst_findusages.cpp index f85ee66e24..9af88ad39c 100644 --- a/tests/auto/cplusplus/findusages/tst_findusages.cpp +++ b/tests/auto/cplusplus/findusages/tst_findusages.cpp @@ -126,6 +126,8 @@ private Q_SLOTS: void templatePartialSpecialization_2(); void template_SFINAE_1(); void variableTemplateInExpression(); + + void variadicMacros(); }; void tst_FindUsages::dump(const QList<Usage> &usages) const @@ -1624,5 +1626,43 @@ int main(){ QCOMPARE(find.usages().size(), 2); } +void tst_FindUsages::variadicMacros() +{ + const QByteArray src = + R"( +struct MyStruct { int value; }; +#define FOO( ... ) int foo() +FOO(1) { + MyStruct s; + s.value; +} +int main(){} +)"; + + Document::Ptr doc = Document::create("variadicMacros"); + doc->setUtf8Source(src); + doc->parse(); + doc->check(); + + QVERIFY(doc->diagnosticMessages().isEmpty()); + QVERIFY(doc->globalSymbolCount() >= 1); + + Snapshot snapshot; + snapshot.insert(doc); + + Class *s = doc->globalSymbolAt(0)->asClass(); + QVERIFY(s); + QCOMPARE(s->name()->identifier()->chars(), "MyStruct"); + QCOMPARE(s->memberCount(), 1); + + Declaration *sv = s->memberAt(0)->asDeclaration(); + QVERIFY(sv); + QCOMPARE(sv->name()->identifier()->chars(), "value"); + + FindUsages find(src, doc, snapshot); + find(sv); + QCOMPARE(find.usages().size(), 2); +} + QTEST_APPLESS_MAIN(tst_FindUsages) #include "tst_findusages.moc" |