| 6716 | } |
| 6717 | |
| 6718 | void enum16() { |
| 6719 | { |
| 6720 | GET_SYMBOL_DB("struct B {\n" // #12538 |
| 6721 | " struct S {\n" |
| 6722 | " enum E { E0 = 0 };\n" |
| 6723 | " };\n" |
| 6724 | "};\n" |
| 6725 | "struct D : B {\n" |
| 6726 | " S::E f() const {\n" |
| 6727 | " return S::E0;\n" |
| 6728 | " }\n" |
| 6729 | "};\n"); |
| 6730 | ASSERT(db != nullptr); |
| 6731 | auto it = db->scopeList.begin(); |
| 6732 | std::advance(it, 3); |
| 6733 | const Enumerator* E0 = it->findEnumerator("E0"); |
| 6734 | ASSERT(E0 && E0->value_known && E0->value == 0); |
| 6735 | const Token* const e = Token::findsimplematch(tokenizer.tokens(), "E0 ;"); |
| 6736 | ASSERT(e && e->enumerator()); |
| 6737 | ASSERT_EQUALS(E0, e->enumerator()); |
| 6738 | } |
| 6739 | { |
| 6740 | GET_SYMBOL_DB("namespace ns {\n" // #12567 |
| 6741 | " struct S1 {\n" |
| 6742 | " enum E { E1 } e;\n" |
| 6743 | " };\n" |
| 6744 | " struct S2 {\n" |
| 6745 | " static void f();\n" |
| 6746 | " };\n" |
| 6747 | "}\n" |
| 6748 | "void ns::S2::f() {\n" |
| 6749 | " S1 s;\n" |
| 6750 | " s.e = S1::E1;\n" |
| 6751 | "}\n"); |
| 6752 | ASSERT(db != nullptr); |
| 6753 | auto it = db->scopeList.begin(); |
| 6754 | std::advance(it, 3); |
| 6755 | const Enumerator* E1 = it->findEnumerator("E1"); |
| 6756 | ASSERT(E1 && E1->value_known && E1->value == 0); |
| 6757 | const Token* const e = Token::findsimplematch(tokenizer.tokens(), "E1 ;"); |
| 6758 | ASSERT(e && e->enumerator()); |
| 6759 | ASSERT_EQUALS(E1, e->enumerator()); |
| 6760 | } |
| 6761 | { |
| 6762 | GET_SYMBOL_DB("namespace N {\n" |
| 6763 | " struct S1 {\n" |
| 6764 | " enum E { E1 } e;\n" |
| 6765 | " };\n" |
| 6766 | " namespace O {\n" |
| 6767 | " struct S2 {\n" |
| 6768 | " static void f();\n" |
| 6769 | " };\n" |
| 6770 | " }\n" |
| 6771 | "}\n" |
| 6772 | "void N::O::S2::f() {\n" |
| 6773 | " S1 s;\n" |
| 6774 | " s.e = S1::E1;\n" |
| 6775 | "}\n"); |
nothing calls this directly
no test coverage detected