@@ -400,6 +400,9 @@ class TestSymbolDatabase: public TestFixture {
400400 TEST_CASE (findFunction33); // #9885 variadic function
401401 TEST_CASE (findFunction34); // #10061
402402 TEST_CASE (findFunction35);
403+ TEST_CASE (findFunction36); // #10122
404+ TEST_CASE (findFunction37); // #10124
405+ TEST_CASE (findFunction38); // #10152
403406 TEST_CASE (findFunctionContainer);
404407 TEST_CASE (findFunctionExternC);
405408 TEST_CASE (findFunctionGlobalScope); // ::foo
@@ -6262,6 +6265,63 @@ class TestSymbolDatabase: public TestFixture {
62626265 ASSERT_EQUALS (5 , foo->function ()->tokenDef ->linenr ());
62636266 }
62646267
6268+ void findFunction36 () { // #10122
6269+ GET_SYMBOL_DB (" namespace external {\n "
6270+ " enum class T { };\n "
6271+ " }\n "
6272+ " namespace ns {\n "
6273+ " class A {\n "
6274+ " public:\n "
6275+ " void f(external::T);\n "
6276+ " };\n "
6277+ " }\n "
6278+ " namespace ns {\n "
6279+ " void A::f(external::T link_type) { }\n "
6280+ " }" );
6281+ ASSERT_EQUALS (" " , errout.str ());
6282+ const Token *functok = Token::findsimplematch (tokenizer.tokens (), " f ( external :: T link_type )" );
6283+ ASSERT (functok);
6284+ ASSERT (functok->function ());
6285+ ASSERT (functok->function ()->name () == " f" );
6286+ ASSERT_EQUALS (7 , functok->function ()->tokenDef ->linenr ());
6287+ }
6288+
6289+ void findFunction37 () { // #10124
6290+ GET_SYMBOL_DB (" namespace ns {\n "
6291+ " class V { };\n "
6292+ " }\n "
6293+ " class A {\n "
6294+ " public:\n "
6295+ " void f(const ns::V&);\n "
6296+ " };\n "
6297+ " using ::ns::V;\n "
6298+ " void A::f(const V&) { }" );
6299+ ASSERT_EQUALS (" " , errout.str ());
6300+ const Token *functok = Token::findsimplematch (tokenizer.tokens (), " f ( const :: ns :: V & )" );
6301+ ASSERT (functok);
6302+ ASSERT (functok->function ());
6303+ ASSERT (functok->function ()->name () == " f" );
6304+ ASSERT_EQUALS (6 , functok->function ()->tokenDef ->linenr ());
6305+ }
6306+
6307+ void findFunction38 () { // #10125
6308+ GET_SYMBOL_DB (" namespace ns {\n "
6309+ " class V { };\n "
6310+ " using Var = V;\n "
6311+ " }\n "
6312+ " class A {\n "
6313+ " void f(const ns::Var&);\n "
6314+ " };\n "
6315+ " using ::ns::Var;\n "
6316+ " void A::f(const Var&) {}" );
6317+ ASSERT_EQUALS (" " , errout.str ());
6318+ const Token *functok = Token::findsimplematch (tokenizer.tokens (), " f ( const :: ns :: V & )" );
6319+ ASSERT (functok);
6320+ ASSERT (functok->function ());
6321+ ASSERT (functok->function ()->name () == " f" );
6322+ ASSERT_EQUALS (6 , functok->function ()->tokenDef ->linenr ());
6323+ }
6324+
62656325 void findFunctionContainer () {
62666326 {
62676327 GET_SYMBOL_DB (" void dostuff(std::vector<int> v);\n "
0 commit comments