#1943 (segmentation fault of cppcheck (= default))
This commit is contained in:
parent
1faaa5471c
commit
aa00587fed
|
@ -1749,6 +1749,37 @@ bool Tokenizer::tokenize(std::istream &code, const char FileName[], const std::s
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Remove "= default|delete" inside class|struct definitions
|
||||||
|
// Todo: Remove it if it is used "externally" too.
|
||||||
|
for (Token *tok = _tokens; tok; tok = tok->next())
|
||||||
|
{
|
||||||
|
if (Token::Match(tok, "struct|class %var% :|{"))
|
||||||
|
{
|
||||||
|
unsigned int indentlevel = 0;
|
||||||
|
for (Token * tok2 = tok->tokAt(2); tok2; tok2 = tok2->next())
|
||||||
|
{
|
||||||
|
if (tok2->str() == "{")
|
||||||
|
++indentlevel;
|
||||||
|
else if (tok2->str() == "}")
|
||||||
|
{
|
||||||
|
if (indentlevel <= 1)
|
||||||
|
break;
|
||||||
|
--indentlevel;
|
||||||
|
}
|
||||||
|
else if (indentlevel == 1 && Token::Match(tok2, ") = delete|default ;"))
|
||||||
|
{
|
||||||
|
const Token *end = tok2->tokAt(4);
|
||||||
|
tok2 = tok2->link()->previous();
|
||||||
|
while ((tok2->isName() && tok2->str().find(":") == std::string::npos) ||
|
||||||
|
Token::Match(tok2, "[&*~]"))
|
||||||
|
tok2 = tok2->previous();
|
||||||
|
if (Token::Match(tok2, "[;{}]") || tok2->isName())
|
||||||
|
Token::eraseTokens(tok2, end);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Remove __declspec()
|
// Remove __declspec()
|
||||||
simplifyDeclspec();
|
simplifyDeclspec();
|
||||||
|
|
||||||
|
|
|
@ -231,6 +231,7 @@ private:
|
||||||
TEST_CASE(removedeclspec);
|
TEST_CASE(removedeclspec);
|
||||||
TEST_CASE(removeattribute);
|
TEST_CASE(removeattribute);
|
||||||
TEST_CASE(cpp0xtemplate);
|
TEST_CASE(cpp0xtemplate);
|
||||||
|
TEST_CASE(cpp0xdefault);
|
||||||
|
|
||||||
TEST_CASE(arraySize);
|
TEST_CASE(arraySize);
|
||||||
|
|
||||||
|
@ -3874,6 +3875,25 @@ private:
|
||||||
ASSERT_EQUALS(";\n\n\nint main ( )\n{\nfn2<int> ( ) ;\n}void fn2<int> ( int t = [ ] { return 1 ; } ( ) )\n{ }", tokenizeAndStringify(code));
|
ASSERT_EQUALS(";\n\n\nint main ( )\n{\nfn2<int> ( ) ;\n}void fn2<int> ( int t = [ ] { return 1 ; } ( ) )\n{ }", tokenizeAndStringify(code));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cpp0xdefault()
|
||||||
|
{
|
||||||
|
{
|
||||||
|
const char *code = "struct foo {"
|
||||||
|
" foo() = default;"
|
||||||
|
"}";
|
||||||
|
ASSERT_EQUALS("struct foo { }", tokenizeAndStringify(code));
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const char *code = "struct foo {"
|
||||||
|
" foo();"
|
||||||
|
"}"
|
||||||
|
"foo::foo() = delete;";
|
||||||
|
ASSERT_EQUALS("struct foo { foo ( ) ; } foo :: foo ( ) = delete ;", tokenizeAndStringify(code));
|
||||||
|
TODO_ASSERT_EQUALS("struct foo { }", tokenizeAndStringify(code));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
std::string arraySize_(const std::string &code)
|
std::string arraySize_(const std::string &code)
|
||||||
{
|
{
|
||||||
// tokenize..
|
// tokenize..
|
||||||
|
|
Loading…
Reference in New Issue