forked from qt-creator/qt-creator
C++: fix lookups for functions with const args
Make declarations equal in case they differ only by argument const and/or volatile (13.1.3.4). Task-number: QTCREATORBUG-18475 Change-Id: Id0561fda3b9081b92716a8739ba9963e90b5d709 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
This commit is contained in:
16
src/libs/3rdparty/cplusplus/Symbols.cpp
vendored
16
src/libs/3rdparty/cplusplus/Symbols.cpp
vendored
@@ -337,8 +337,22 @@ bool Function::isSignatureEqualTo(const Function *other, Matcher *matcher) const
|
|||||||
for (unsigned i = 0; i < argc; ++i) {
|
for (unsigned i = 0; i < argc; ++i) {
|
||||||
Symbol *l = argumentAt(i);
|
Symbol *l = argumentAt(i);
|
||||||
Symbol *r = other->argumentAt(i);
|
Symbol *r = other->argumentAt(i);
|
||||||
if (! l->type().match(r->type(), matcher))
|
if (! l->type().match(r->type(), matcher)) {
|
||||||
|
if (!l->type()->isReferenceType() && !l->type()->isPointerType()
|
||||||
|
&& !l->type()->isPointerToMemberType()
|
||||||
|
&& !r->type()->isReferenceType() && !r->type()->isPointerType()
|
||||||
|
&& !r->type()->isPointerToMemberType()) {
|
||||||
|
FullySpecifiedType lType = l->type();
|
||||||
|
FullySpecifiedType rType = r->type();
|
||||||
|
lType.setConst(false);
|
||||||
|
lType.setVolatile(false);
|
||||||
|
rType.setConst(false);
|
||||||
|
rType.setVolatile(false);
|
||||||
|
if (lType.match(rType))
|
||||||
|
continue;
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -941,6 +941,34 @@ void CppEditorPlugin::test_FollowSymbolUnderCursor_data()
|
|||||||
"};\n"
|
"};\n"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
QTest::newRow("matchFunctionSignature_Follow_6") << _(
|
||||||
|
"class Foo {\n"
|
||||||
|
" void $foo(int);\n"
|
||||||
|
"};\n"
|
||||||
|
"void Foo::@foo(const volatile int) {}\n"
|
||||||
|
);
|
||||||
|
|
||||||
|
QTest::newRow("matchFunctionSignature_Follow_7") << _(
|
||||||
|
"class Foo {\n"
|
||||||
|
" void $foo(const volatile int);\n"
|
||||||
|
"};\n"
|
||||||
|
"void Foo::@foo(int) {}\n"
|
||||||
|
);
|
||||||
|
|
||||||
|
QTest::newRow("matchFunctionSignature_Follow_8") << _(
|
||||||
|
"class Foo {\n"
|
||||||
|
" void @$foo(int *);\n"
|
||||||
|
"};\n"
|
||||||
|
"void Foo::foo(const int *) {}\n"
|
||||||
|
);
|
||||||
|
|
||||||
|
QTest::newRow("matchFunctionSignature_Follow_9") << _(
|
||||||
|
"class Foo {\n"
|
||||||
|
" void @$foo(int&);\n"
|
||||||
|
"};\n"
|
||||||
|
"void Foo::foo(const int&) {}\n"
|
||||||
|
);
|
||||||
|
|
||||||
QTest::newRow("infiniteLoopLocalTypedef_QTCREATORBUG-11999") << _(
|
QTest::newRow("infiniteLoopLocalTypedef_QTCREATORBUG-11999") << _(
|
||||||
"template<class MyTree>\n"
|
"template<class MyTree>\n"
|
||||||
"class TreeConstIterator\n"
|
"class TreeConstIterator\n"
|
||||||
|
|||||||
Reference in New Issue
Block a user