aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libs/3rdparty/cplusplus/Symbols.cpp16
-rw-r--r--src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp28
2 files changed, 43 insertions, 1 deletions
diff --git a/src/libs/3rdparty/cplusplus/Symbols.cpp b/src/libs/3rdparty/cplusplus/Symbols.cpp
index f7423e7742..9a84ccacd6 100644
--- a/src/libs/3rdparty/cplusplus/Symbols.cpp
+++ b/src/libs/3rdparty/cplusplus/Symbols.cpp
@@ -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;
}
diff --git a/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp b/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp
index b2e1c98294..4fbd7c554d 100644
--- a/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp
+++ b/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp
@@ -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"