@@ -304,6 +304,7 @@ class TestSymbolDatabase : public TestFixture {
304
304
TEST_CASE(functionArgs19); // #10376
305
305
TEST_CASE(functionArgs20);
306
306
TEST_CASE(functionArgs21);
307
+ TEST_CASE(functionArgs22); // #13945
307
308
308
309
TEST_CASE(functionImplicitlyVirtual);
309
310
TEST_CASE(functionGetOverridden);
@@ -3064,6 +3065,22 @@ class TestSymbolDatabase : public TestFixture {
3064
3065
ASSERT_EQUALS("", arg->name());
3065
3066
}
3066
3067
3068
+ void functionArgs22() {
3069
+ const char code[] = "typedef void (*callback_fn)(void);\n"
3070
+ "void ext_func(const callback_fn cb, size_t v) {}\n";
3071
+ GET_SYMBOL_DB(code);
3072
+ ASSERT(db != nullptr);
3073
+ ASSERT_EQUALS(1U, db->functionScopes.size());
3074
+ const auto it = db->functionScopes.cbegin();
3075
+ const Function *func = (*it)->function;
3076
+ ASSERT_EQUALS("ext_func", func->name());
3077
+ ASSERT_EQUALS(2, func->argCount());
3078
+ const Variable *arg = func->getArgumentVar(0);
3079
+ ASSERT_EQUALS("cb", arg->name());
3080
+ arg = func->getArgumentVar(1);
3081
+ ASSERT_EQUALS("v", arg->name());
3082
+ }
3083
+
3067
3084
void functionImplicitlyVirtual() {
3068
3085
GET_SYMBOL_DB("class base { virtual void f(); };\n"
3069
3086
"class derived : base { void f(); };\n"
0 commit comments