@@ -387,6 +387,7 @@ class TestSymbolDatabase : public TestFixture {
387387 TEST_CASE (enum9);
388388 TEST_CASE (enum10); // #11001
389389 TEST_CASE (enum11);
390+ TEST_CASE (enum12);
390391
391392 TEST_CASE (sizeOfType);
392393
@@ -5532,6 +5533,22 @@ class TestSymbolDatabase : public TestFixture {
55325533 ASSERT_EQUALS (" " , errout.str ());
55335534 }
55345535
5536+ void enum12 () {
5537+ GET_SYMBOL_DB_C (" struct { enum E { E0 }; } t;\n "
5538+ " void f() {\n "
5539+ " if (t.E0) {}\n "
5540+ " }\n " );
5541+ ASSERT (db != nullptr );
5542+ auto it = db->scopeList .begin ();
5543+ std::advance (it, 2 );
5544+ const Enumerator* E0 = it->findEnumerator (" E0" );
5545+ ASSERT (E0 && E0 ->value_known );
5546+ ASSERT_EQUALS (E0 ->value , 0 );
5547+ const Token* const e = Token::findsimplematch (tokenizer.tokens (), " E0 )" );
5548+ ASSERT (e && e->enumerator ());
5549+ ASSERT_EQUALS (e->enumerator (), E0 );
5550+ }
5551+
55355552 void sizeOfType () {
55365553 // #7615 - crash in Symboldatabase::sizeOfType()
55375554 GET_SYMBOL_DB (" enum e;\n "
@@ -7011,6 +7028,20 @@ class TestSymbolDatabase : public TestFixture {
70117028 ASSERT (functok->function ()->name () == " f" );
70127029 ASSERT_EQUALS (3 , functok->function ()->tokenDef ->linenr ());
70137030 }
7031+ {
7032+ GET_SYMBOL_DB (" struct T { enum E { E0 }; } t; \n " // #11559
7033+ " void f(const void*, T::E) {}\n "
7034+ " void f(const int&, T::E) {}\n "
7035+ " void g() {\n "
7036+ " f(nullptr, t.E0);\n "
7037+ " }\n " );
7038+ ASSERT_EQUALS (" " , errout.str ());
7039+ const Token *functok = Token::findsimplematch (tokenizer.tokens (), " f ( nullptr" );
7040+ ASSERT (functok);
7041+ ASSERT (functok->function ());
7042+ ASSERT (functok->function ()->name () == " f" );
7043+ ASSERT_EQUALS (2 , functok->function ()->tokenDef ->linenr ());
7044+ }
70147045 }
70157046
70167047 void findFunction45 () {
0 commit comments