From e6467703b274436349a4e6ec3704c0f4cd6110e9 Mon Sep 17 00:00:00 2001 From: PKEuS Date: Mon, 28 Sep 2015 16:08:14 +0200 Subject: [PATCH] Support cast to ** in Tokenizer::simplifyCasts() (#7005) --- lib/tokenize.cpp | 2 +- test/testsimplifytokens.cpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 7d5ce246d..22b756fff 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -4927,7 +4927,7 @@ void Tokenizer::simplifyCasts() } // Replace pointer casts of 0.. "(char *)0" => "0" - while (Token::Match(tok->next(), "( %type% %type%| * ) 0")) { + while (Token::Match(tok->next(), "( %type% %type%| * *| ) 0")) { tok->linkAt(1)->next()->isCast(true); Token::eraseTokens(tok, tok->next()->link()->next()); if (tok->str() == ")" && tok->link()->previous()) { diff --git a/test/testsimplifytokens.cpp b/test/testsimplifytokens.cpp index e3f2da661..ed31a78b5 100644 --- a/test/testsimplifytokens.cpp +++ b/test/testsimplifytokens.cpp @@ -370,6 +370,7 @@ private: ASSERT_EQUALS("class A { A operator* ( int ) ; } ;", tok("class A { A operator *(int); };")); ASSERT_EQUALS("class A { A operator* ( int ) const ; } ;", tok("class A { A operator *(int) const; };")); ASSERT_EQUALS("if ( p == 0 ) { ; }", tok("if (p == (char *)(char *)0);")); + ASSERT_EQUALS("if ( p == 0 ) { ; }", tok("if (p == (char **)0);")); // no simplification as the cast may be important here. see #2897 for example ASSERT_EQUALS("; * ( ( char * ) p + 1 ) = 0 ;", tok("; *((char *)p + 1) = 0;"));