@@ -5982,18 +5982,32 @@ class TestSymbolDatabase : public TestFixture {
59825982 }
59835983
59845984 void createSymbolDatabaseFindAllScopes10() {
5985- GET_SYMBOL_DB("void g() {\n"
5986- " for (int i = 0, r = 1; i < r; ++i) {}\n"
5987- "}\n");
5988- ASSERT(db);
5989- ASSERT_EQUALS(3, db->scopeList.size());
5990- ASSERT_EQUALS(2, db->scopeList.back().varlist.size());
5991- const Token* const iTok = Token::findsimplematch(tokenizer.tokens(), "i");
5992- const Token* const rTok = Token::findsimplematch(iTok, "r");
5993- const Variable* i = iTok->variable(), *r = rTok->variable();
5994- ASSERT(i != nullptr && r != nullptr);
5995- ASSERT_EQUALS(i->typeStartToken(), r->typeStartToken());
5996- ASSERT(i->valueType()->isTypeEqual(r->valueType()));
5985+ {
5986+ GET_SYMBOL_DB("void g() {\n"
5987+ " for (int i = 0, r = 1; i < r; ++i) {}\n"
5988+ "}\n");
5989+ ASSERT(db);
5990+ ASSERT_EQUALS(3, db->scopeList.size());
5991+ ASSERT_EQUALS(2, db->scopeList.back().varlist.size());
5992+ const Token* const iTok = Token::findsimplematch(tokenizer.tokens(), "i");
5993+ const Token* const rTok = Token::findsimplematch(iTok, "r");
5994+ const Variable* i = iTok->variable(), * r = rTok->variable();
5995+ ASSERT(i != nullptr && r != nullptr);
5996+ ASSERT_EQUALS(i->typeStartToken(), r->typeStartToken());
5997+ ASSERT(i->valueType()->isTypeEqual(r->valueType()));
5998+ }
5999+ {
6000+ GET_SYMBOL_DB("void f() {\n" // #13697
6001+ " typedef void (*func_t)();\n"
6002+ " func_t a[] = { nullptr };\n"
6003+ " for (func_t* fp = a; *fp; fp++) {}\n"
6004+ "}\n");
6005+ ASSERT(db); // don't hang
6006+ ASSERT_EQUALS(3, db->scopeList.size());
6007+ ASSERT_EQUALS(1, db->scopeList.back().varlist.size());
6008+ const Token* const fp = Token::findsimplematch(tokenizer.tokens(), "fp");
6009+ ASSERT(fp && fp->variable());
6010+ }
59976011 }
59986012
59996013 void createSymbolDatabaseIncompleteVars()
0 commit comments