Fixed #6266: Support noexcept(false)
This commit is contained in:
parent
4d81945ac5
commit
ff5ede342b
|
@ -475,14 +475,15 @@ SymbolDatabase::SymbolDatabase(const Tokenizer *tokenizer, const Settings *setti
|
||||||
else if (Token::Match(end, ") const| noexcept (") &&
|
else if (Token::Match(end, ") const| noexcept (") &&
|
||||||
(end->next()->str() == "const" ? Token::Match(end->linkAt(3), ") ;|=") :
|
(end->next()->str() == "const" ? Token::Match(end->linkAt(3), ") ;|=") :
|
||||||
Token::Match(end->linkAt(2), ") ;|="))) {
|
Token::Match(end->linkAt(2), ") ;|="))) {
|
||||||
function.isNoExcept = true;
|
|
||||||
|
|
||||||
if (end->next()->str() == "const")
|
if (end->next()->str() == "const")
|
||||||
tok = end->tokAt(3);
|
tok = end->tokAt(3);
|
||||||
else
|
else
|
||||||
tok = end->tokAt(2);
|
tok = end->tokAt(2);
|
||||||
|
|
||||||
if (Token::Match(tok, "= %any% ;")) {
|
function.isNoExcept = tok->strAt(1) != "false";
|
||||||
|
|
||||||
|
if (Token::Match(tok->link()->next(), "= %any% ;")) {
|
||||||
function.isPure = true;
|
function.isPure = true;
|
||||||
tok = tok->tokAt(2);
|
tok = tok->tokAt(2);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2408,9 +2408,9 @@ private:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define CLASS_FUNC(x, y) const Function *x = findFunctionByName(#x, y); \
|
#define CLASS_FUNC(x, y, z) const Function *x = findFunctionByName(#x, y); \
|
||||||
ASSERT_EQUALS(true, x != nullptr); \
|
ASSERT_EQUALS(true, x != nullptr); \
|
||||||
if (x) ASSERT_EQUALS(true, x->isNoExcept);
|
if (x) ASSERT_EQUALS(z, x->isNoExcept);
|
||||||
|
|
||||||
void noexceptFunction3() {
|
void noexceptFunction3() {
|
||||||
GET_SYMBOL_DB("struct Fred {\n"
|
GET_SYMBOL_DB("struct Fred {\n"
|
||||||
|
@ -2426,6 +2426,7 @@ private:
|
||||||
" void func10() noexcept = 0;\n"
|
" void func10() noexcept = 0;\n"
|
||||||
" void func11() const noexcept(true) = 0;\n"
|
" void func11() const noexcept(true) = 0;\n"
|
||||||
" void func12() const noexcept(true) = 0;\n"
|
" void func12() const noexcept(true) = 0;\n"
|
||||||
|
" void func13() const noexcept(false) = 0;\n"
|
||||||
"};");
|
"};");
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
ASSERT_EQUALS(true, db != nullptr); // not null
|
ASSERT_EQUALS(true, db != nullptr); // not null
|
||||||
|
@ -2434,18 +2435,19 @@ private:
|
||||||
const Scope *fred = db->findScopeByName("Fred");
|
const Scope *fred = db->findScopeByName("Fred");
|
||||||
ASSERT_EQUALS(true, fred != nullptr);
|
ASSERT_EQUALS(true, fred != nullptr);
|
||||||
if (fred) {
|
if (fred) {
|
||||||
CLASS_FUNC(func1, fred);
|
CLASS_FUNC(func1, fred, true);
|
||||||
CLASS_FUNC(func2, fred);
|
CLASS_FUNC(func2, fred, true);
|
||||||
CLASS_FUNC(func3, fred);
|
CLASS_FUNC(func3, fred, true);
|
||||||
CLASS_FUNC(func4, fred);
|
CLASS_FUNC(func4, fred, true);
|
||||||
CLASS_FUNC(func5, fred);
|
CLASS_FUNC(func5, fred, true);
|
||||||
CLASS_FUNC(func6, fred);
|
CLASS_FUNC(func6, fred, true);
|
||||||
CLASS_FUNC(func7, fred);
|
CLASS_FUNC(func7, fred, true);
|
||||||
CLASS_FUNC(func8, fred);
|
CLASS_FUNC(func8, fred, true);
|
||||||
CLASS_FUNC(func9, fred);
|
CLASS_FUNC(func9, fred, true);
|
||||||
CLASS_FUNC(func10, fred);
|
CLASS_FUNC(func10, fred, true);
|
||||||
CLASS_FUNC(func11, fred);
|
CLASS_FUNC(func11, fred, true);
|
||||||
CLASS_FUNC(func12, fred);
|
CLASS_FUNC(func12, fred, true);
|
||||||
|
CLASS_FUNC(func13, fred, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2469,7 +2471,7 @@ private:
|
||||||
const Scope *b = db->findScopeByName("B");
|
const Scope *b = db->findScopeByName("B");
|
||||||
ASSERT_EQUALS(true, b != nullptr);
|
ASSERT_EQUALS(true, b != nullptr);
|
||||||
if (b) {
|
if (b) {
|
||||||
CLASS_FUNC(B, b);
|
CLASS_FUNC(B, b, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue