Set enum ValueType for :: (#5298)
This commit is contained in:
parent
072212e708
commit
610777d586
|
@ -6414,10 +6414,14 @@ void SymbolDatabase::setValueType(Token* tok, const ValueType& valuetype, Source
|
|||
if (it != typeScope->varlist.end())
|
||||
var = &*it;
|
||||
}
|
||||
if (var)
|
||||
if (var) {
|
||||
setValueType(parent, *var);
|
||||
return;
|
||||
}
|
||||
if (const Enumerator* enu = parent->astOperand2()->enumerator())
|
||||
setValueType(parent, *enu);
|
||||
return;
|
||||
}
|
||||
|
||||
// range for loop, auto
|
||||
if (vt2 &&
|
||||
|
|
|
@ -384,6 +384,7 @@ private:
|
|||
TEST_CASE(enum10); // #11001
|
||||
TEST_CASE(enum11);
|
||||
TEST_CASE(enum12);
|
||||
TEST_CASE(enum13);
|
||||
|
||||
TEST_CASE(sizeOfType);
|
||||
|
||||
|
@ -5701,6 +5702,23 @@ private:
|
|||
ASSERT_EQUALS(e->enumerator(), E0);
|
||||
}
|
||||
|
||||
void enum13() {
|
||||
GET_SYMBOL_DB("struct S { enum E { E0, E1 }; };\n"
|
||||
"void f(bool b) {\n"
|
||||
" auto e = b ? S::E0 : S::E1;\n"
|
||||
"}\n");
|
||||
ASSERT(db != nullptr);
|
||||
auto it = db->scopeList.begin();
|
||||
std::advance(it, 2);
|
||||
const Enumerator* E1 = it->findEnumerator("E1");
|
||||
ASSERT(E1 && E1->value_known);
|
||||
ASSERT_EQUALS(E1->value, 1);
|
||||
const Token* const a = Token::findsimplematch(tokenizer.tokens(), "auto");
|
||||
ASSERT(a && a->valueType());
|
||||
TODO_ASSERT(E1->scope == a->valueType()->typeScope);
|
||||
ASSERT_EQUALS(a->valueType()->type, ValueType::INT);
|
||||
}
|
||||
|
||||
void sizeOfType() {
|
||||
// #7615 - crash in Symboldatabase::sizeOfType()
|
||||
GET_SYMBOL_DB("enum e;\n"
|
||||
|
|
Loading…
Reference in New Issue