From de1e12f3af483ab2c4014eb6230c83ddb1c3223d Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 4 Nov 2020 14:13:16 +0100 Subject: [PATCH] CPlusPlus: Correctly categorize post-increment and -decrement accesses MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Id21c13ea58f6747c226d91aff2b00c3409faa880 Reviewed-by: André Hartmann --- src/libs/cplusplus/FindUsages.cpp | 2 ++ tests/auto/cplusplus/findusages/tst_findusages.cpp | 10 ++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/libs/cplusplus/FindUsages.cpp b/src/libs/cplusplus/FindUsages.cpp index 95b3f266ccd..5c3a9c62542 100644 --- a/src/libs/cplusplus/FindUsages.cpp +++ b/src/libs/cplusplus/FindUsages.cpp @@ -375,6 +375,8 @@ Usage::Type FindUsages::getType(int line, int column, int tokenIndex) return Usage::Type::Read; } } + if (const auto postIncrDecrOp = (*it)->asPostIncrDecr()) + return checkPotentialWrite(Usage::Type::Write, it + 1); if (const auto declaratorId = (*it)->asDeclaratorId()) { // We don't want to classify constructors and destructors as declarations // when listing class usages. diff --git a/tests/auto/cplusplus/findusages/tst_findusages.cpp b/tests/auto/cplusplus/findusages/tst_findusages.cpp index bb91c3a18fd..b7f905433c0 100644 --- a/tests/auto/cplusplus/findusages/tst_findusages.cpp +++ b/tests/auto/cplusplus/findusages/tst_findusages.cpp @@ -2086,6 +2086,8 @@ int main() } if (S::value) {} if (S::value = 0) {} + ++S::value; + S::value--; } )"; @@ -2111,7 +2113,7 @@ int main() // Access to struct member FindUsages find(src, doc, snapshot); find(sv); - QCOMPARE(find.usages().size(), 23); + QCOMPARE(find.usages().size(), 25); QCOMPARE(find.usages().at(0).type, Usage::Type::Read); QCOMPARE(find.usages().at(1).type, Usage::Type::Declaration); QCOMPARE(find.usages().at(2).type, Usage::Type::WritableRef); @@ -2135,6 +2137,8 @@ int main() QCOMPARE(find.usages().at(20).type, Usage::Type::Write); QCOMPARE(find.usages().at(21).type, Usage::Type::Read); QCOMPARE(find.usages().at(22).type, Usage::Type::Write); + QCOMPARE(find.usages().at(23).type, Usage::Type::Write); + QCOMPARE(find.usages().at(24).type, Usage::Type::Write); Declaration * const sv2 = structS->memberAt(2)->asDeclaration(); QVERIFY(sv2); @@ -2217,7 +2221,7 @@ int main() // Usages of struct type find(structS); - QCOMPARE(find.usages().size(), 10); + QCOMPARE(find.usages().size(), 12); QCOMPARE(find.usages().at(0).type, Usage::Type::Declaration); QCOMPARE(find.usages().at(1).type, Usage::Type::Other); QCOMPARE(find.usages().at(2).type, Usage::Type::Other); @@ -2231,6 +2235,8 @@ int main() QCOMPARE(find.usages().at(7).type, Usage::Type::Write); QCOMPARE(find.usages().at(8).type, Usage::Type::Read); QCOMPARE(find.usages().at(9).type, Usage::Type::Write); + QCOMPARE(find.usages().at(10).type, Usage::Type::Write); + QCOMPARE(find.usages().at(11).type, Usage::Type::Write); } QTEST_APPLESS_MAIN(tst_FindUsages)