Fixed segmentation fault in SymbolDatabase::SymbolDatabase(Ticket #4892)
This commit is contained in:
parent
2ba337faf7
commit
295869a866
|
@ -742,6 +742,11 @@ SymbolDatabase::SymbolDatabase(const Tokenizer *tokenizer, const Settings *setti
|
||||||
for (std::list<Scope>::iterator it = scopeList.begin(); it != scopeList.end(); ++it) {
|
for (std::list<Scope>::iterator it = scopeList.begin(); it != scopeList.end(); ++it) {
|
||||||
scope = &(*it);
|
scope = &(*it);
|
||||||
|
|
||||||
|
if (!scope->definedType) {
|
||||||
|
_blankTypes.push_back(Type());
|
||||||
|
scope->definedType = &_blankTypes.back();
|
||||||
|
}
|
||||||
|
|
||||||
if (scope->isClassOrStruct() && scope->definedType->needInitialization == Type::Unknown) {
|
if (scope->isClassOrStruct() && scope->definedType->needInitialization == Type::Unknown) {
|
||||||
// check for default constructor
|
// check for default constructor
|
||||||
bool hasDefaultConstructor = false;
|
bool hasDefaultConstructor = false;
|
||||||
|
@ -799,7 +804,7 @@ SymbolDatabase::SymbolDatabase(const Tokenizer *tokenizer, const Settings *setti
|
||||||
if (scope->definedType->needInitialization == Type::Unknown)
|
if (scope->definedType->needInitialization == Type::Unknown)
|
||||||
unknowns++;
|
unknowns++;
|
||||||
}
|
}
|
||||||
} else if (scope->type == Scope::eUnion && scope->definedType && scope->definedType->needInitialization == Type::Unknown)
|
} else if (scope->type == Scope::eUnion && scope->definedType->needInitialization == Type::Unknown)
|
||||||
scope->definedType->needInitialization = Type::True;
|
scope->definedType->needInitialization = Type::True;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -730,6 +730,9 @@ private:
|
||||||
|
|
||||||
/** variable symbol table */
|
/** variable symbol table */
|
||||||
std::vector<const Variable *> _variableList;
|
std::vector<const Variable *> _variableList;
|
||||||
|
|
||||||
|
/** list for missing types */
|
||||||
|
std::list<Type> _blankTypes;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -193,6 +193,7 @@ private:
|
||||||
TEST_CASE(symboldatabase33); // ticket #4682 (false negatives)
|
TEST_CASE(symboldatabase33); // ticket #4682 (false negatives)
|
||||||
TEST_CASE(symboldatabase34); // ticket #4694 (segmentation fault)
|
TEST_CASE(symboldatabase34); // ticket #4694 (segmentation fault)
|
||||||
TEST_CASE(symboldatabase35); // ticket #4806 (segmentation fault)
|
TEST_CASE(symboldatabase35); // ticket #4806 (segmentation fault)
|
||||||
|
TEST_CASE(symboldatabase36); // ticket #4892 (segmentation fault)
|
||||||
|
|
||||||
TEST_CASE(isImplicitlyVirtual);
|
TEST_CASE(isImplicitlyVirtual);
|
||||||
|
|
||||||
|
@ -1513,6 +1514,11 @@ private:
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void symboldatabase36() { // ticket #4892
|
||||||
|
check("void struct ( ) { if ( 1 ) } int main ( ) { }");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
}
|
||||||
|
|
||||||
void isImplicitlyVirtual() {
|
void isImplicitlyVirtual() {
|
||||||
{
|
{
|
||||||
GET_SYMBOL_DB("class Base {\n"
|
GET_SYMBOL_DB("class Base {\n"
|
||||||
|
|
Loading…
Reference in New Issue