Fixed #1232 (segmentation fault of cppcheck when scanning templates)
This commit is contained in:
parent
b366dba682
commit
b30b07beee
|
@ -502,7 +502,7 @@ void Tokenizer::simplifyTypedef()
|
||||||
level++;
|
level++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Token::Match(end->next(), "%type% ;"))
|
if (end && end->next() && Token::Match(end->next(), "%type% ;"))
|
||||||
{
|
{
|
||||||
typeName = end->strAt(1);
|
typeName = end->strAt(1);
|
||||||
tok = end->tokAt(2);
|
tok = end->tokAt(2);
|
||||||
|
|
|
@ -144,6 +144,7 @@ private:
|
||||||
TEST_CASE(simplifyTypedef7);
|
TEST_CASE(simplifyTypedef7);
|
||||||
TEST_CASE(simplifyTypedef8);
|
TEST_CASE(simplifyTypedef8);
|
||||||
TEST_CASE(simplifyTypedef9);
|
TEST_CASE(simplifyTypedef9);
|
||||||
|
TEST_CASE(simplifyTypedef10);
|
||||||
TEST_CASE(reverseArraySyntax)
|
TEST_CASE(reverseArraySyntax)
|
||||||
TEST_CASE(simplify_numeric_condition)
|
TEST_CASE(simplify_numeric_condition)
|
||||||
|
|
||||||
|
@ -2372,6 +2373,33 @@ private:
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void simplifyTypedef10()
|
||||||
|
{
|
||||||
|
// ticket # 1232
|
||||||
|
const char code[] = "template <typename F, unsigned int N> struct E"
|
||||||
|
"{"
|
||||||
|
" typedef E<F,(N>0)?(N-1):0> v;"
|
||||||
|
" typedef typename add<v,v>::val val;"
|
||||||
|
" FP_M(val);"
|
||||||
|
"};"
|
||||||
|
"template <typename F> struct E <F,0>"
|
||||||
|
"{"
|
||||||
|
" typedef typename D<1>::val val;"
|
||||||
|
" FP_M(val);"
|
||||||
|
"};";
|
||||||
|
|
||||||
|
Tokenizer tokenizer;
|
||||||
|
std::istringstream istr(code);
|
||||||
|
tokenizer.tokenize(istr, "test.cpp");
|
||||||
|
|
||||||
|
// Clear the error buffer..
|
||||||
|
errout.str("");
|
||||||
|
|
||||||
|
tokenizer.simplifyTokenList();
|
||||||
|
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
}
|
||||||
|
|
||||||
void reverseArraySyntax()
|
void reverseArraySyntax()
|
||||||
{
|
{
|
||||||
ASSERT_EQUALS("a [ 13 ]", tok("13[a]"));
|
ASSERT_EQUALS("a [ 13 ]", tok("13[a]"));
|
||||||
|
|
Loading…
Reference in New Issue