diff --git a/src/checkother.cpp b/src/checkother.cpp index 6664e4b16..47a8a73ff 100644 --- a/src/checkother.cpp +++ b/src/checkother.cpp @@ -896,6 +896,9 @@ void CheckOther::functionVariableUsage() tok = tok->next(); } while (tok && indentlevel > indentlevel0); + + if (! tok) + break; } if (Token::Match(tok, "[;{}] bool|char|short|int|long|float|double %var% ;|=")) diff --git a/test/testunusedvar.cpp b/test/testunusedvar.cpp index 789a497f9..0807afdd0 100644 --- a/test/testunusedvar.cpp +++ b/test/testunusedvar.cpp @@ -69,6 +69,7 @@ private: TEST_CASE(localvarStruct1); TEST_CASE(localvarStruct2); TEST_CASE(localvarStruct3); + TEST_CASE(localvarStruct4); // Ticket #31: sigsegv on incomplete struct TEST_CASE(localvarOp); // Usage with arithmetic operators TEST_CASE(localvarInvert); // Usage with inverted variable @@ -275,6 +276,15 @@ private: ASSERT_EQUALS(std::string(""), errout.str()); } + void localvarStruct4() + { + /* This must not SIGSEGV: */ + functionVariableUsage("void foo()\n" + "{\n" + " struct { \n"); + errout.str(); + } + void localvarOp()