diff options
author | Ivan Donchevskii <ivan.donchevskii@qt.io> | 2018-08-21 10:23:12 +0200 |
---|---|---|
committer | Ivan Donchevskii <ivan.donchevskii@qt.io> | 2018-08-21 10:41:30 +0000 |
commit | 8c21a7a3968a7d146b81f9533093dfdb541376b1 (patch) | |
tree | d6da07d86de5edf09fd0d5556e78a32ba2ac94a6 /tests | |
parent | 8d0391a4f9b91fb15ee3d20db725c7a37c4646aa (diff) |
Clang: Fix local references for operator arguments
Workaround for wrong cursor annotated by Clang.
Use clang_getCursor in case of the variable used as
operator argument to get the proper cursor.
Task-number: QTCREATORBUG-20966
Change-Id: Idb195bffc2296f3fae27595cf9c43c9e6b2c5cd0
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/unit/unittest/clangreferencescollector-test.cpp | 48 | ||||
-rw-r--r-- | tests/unit/unittest/data/references.cpp | 15 |
2 files changed, 63 insertions, 0 deletions
diff --git a/tests/unit/unittest/clangreferencescollector-test.cpp b/tests/unit/unittest/clangreferencescollector-test.cpp index fbc0e81bc3b..f807ade73b0 100644 --- a/tests/unit/unittest/clangreferencescollector-test.cpp +++ b/tests/unit/unittest/clangreferencescollector-test.cpp @@ -463,6 +463,54 @@ TEST_F(ReferencesCollector, ArgumentToFunctionLikeMacro) ASSERT_THAT(actual, expected); } +TEST_F(ReferencesCollector, OverloadedBraceOperatorArgument) +{ + const ReferencesResult expected { + true, + {createSourceRange(171, 7, 1), + createSourceRange(172, 7, 1), + createSourceRange(172, 12, 1), + createSourceRange(173, 7, 1), + createSourceRange(173, 10, 1)}, + }; + + const ReferencesResult actual = getReferences(172, 7); + + ASSERT_THAT(actual, expected); +} + +TEST_F(ReferencesCollector, OverloadedParenOperatorSecondArgument) +{ + const ReferencesResult expected { + true, + {createSourceRange(171, 7, 1), + createSourceRange(172, 7, 1), + createSourceRange(172, 12, 1), + createSourceRange(173, 7, 1), + createSourceRange(173, 10, 1)}, + }; + + const ReferencesResult actual = getReferences(173, 10); + + ASSERT_THAT(actual, expected); +} + +TEST_F(ReferencesCollector, OverloadedOperatorsArgumentsFromOutside) +{ + const ReferencesResult expected { + true, + {createSourceRange(171, 7, 1), + createSourceRange(172, 7, 1), + createSourceRange(172, 12, 1), + createSourceRange(173, 7, 1), + createSourceRange(173, 10, 1)}, + }; + + const ReferencesResult actual = getReferences(171, 7); + + ASSERT_THAT(actual, expected); +} + std::unique_ptr<const Data> ReferencesCollector::data; void ReferencesCollector::SetUpTestCase() diff --git a/tests/unit/unittest/data/references.cpp b/tests/unit/unittest/data/references.cpp index d71a9e8f798..32ff1b90753 100644 --- a/tests/unit/unittest/data/references.cpp +++ b/tests/unit/unittest/data/references.cpp @@ -157,3 +157,18 @@ int functionLikeMacro(int foo) { return BAR(foo); } + +template<class T> +class Container +{ +public: + T &operator[](int); T &operator()(int, int); +}; + +int testOperator() { + Container<int> vec; + + int n = 10; + vec[n] = n * 100; + vec(n, n) = 100; +} |