Commit 550ed292 authored by Ivan Donchevskii's avatar Ivan Donchevskii

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's avatarNikolai Kosjar <nikolai.kosjar@qt.io>
parent 53c85a26
......@@ -337,8 +337,22 @@ bool Function::isSignatureEqualTo(const Function *other, Matcher *matcher) const
for (unsigned i = 0; i < argc; ++i) {
Symbol *l = 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 true;
}
......
......@@ -941,6 +941,34 @@ void CppEditorPlugin::test_FollowSymbolUnderCursor_data()
"};\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") << _(
"template<class MyTree>\n"
"class TreeConstIterator\n"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment