From 88070b044b97a179f3040a4a43fdf13d5ff332a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Thu, 22 Oct 2009 23:00:27 +0200 Subject: [PATCH] Fixed #851 (Tokenizer: sizeof(*a) returns incorrect result) --- src/tokenize.cpp | 6 +++--- test/testsimplifytokens.cpp | 26 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/tokenize.cpp b/src/tokenize.cpp index d07db7c59..b57b97012 100644 --- a/src/tokenize.cpp +++ b/src/tokenize.cpp @@ -1592,15 +1592,15 @@ void Tokenizer::simplifySizeof() { // Try to locate variable declaration.. const Token *decltok = Token::findmatch(_tokens, "%varid%", varid); - if (Token::findmatch(decltok->previous(), "%type% %var% [")) + if (Token::Match(decltok->previous(), "%type% %var% [")) { sz = sizeOfType(decltok->previous()); } - else if (Token::findmatch(decltok->previous(), "* %var% [")) + else if (Token::Match(decltok->previous(), "* %var% [")) { sz = sizeOfType(decltok->previous()); } - else if (Token::findmatch(decltok->tokAt(-2), "%type% * %var%")) + else if (Token::Match(decltok->tokAt(-2), "%type% * %var%")) { sz = sizeOfType(decltok->tokAt(-2)); } diff --git a/test/testsimplifytokens.cpp b/test/testsimplifytokens.cpp index 7d436dd3d..0f2f3cd57 100644 --- a/test/testsimplifytokens.cpp +++ b/test/testsimplifytokens.cpp @@ -68,6 +68,7 @@ private: TEST_CASE(sizeof10); TEST_CASE(sizeof11); TEST_CASE(sizeof12); + TEST_CASE(sizeof13); TEST_CASE(casting); TEST_CASE(template1); @@ -838,6 +839,31 @@ private: ASSERT_EQUALS(expected, tok(code)); } + void sizeof13() + { + // ticket #851 + const char code[] = "int main()\n" + "{\n" + " char *a;\n" + " a = malloc(sizeof(*a));\n" + "}\n" + "\n" + "struct B\n" + "{\n" + " char * b[2];\n" + "};"; + const char expected[] = "int main ( ) " + "{" + " char * a ;" + " a = malloc ( 1 ) ; " + "} " + "struct B " + "{" + " char * b [ 2 ] ; " + "} ;"; + ASSERT_EQUALS(expected, tok(code)); + } + void casting() { {