From 35b00a5e05e6fc225ad1e5750cb0fef9d18a6528 Mon Sep 17 00:00:00 2001 From: PKEuS Date: Sat, 6 Sep 2014 19:00:26 +0200 Subject: [PATCH] Support rValue references in typedef (#1823) --- lib/tokenize.cpp | 2 +- test/testsimplifytokens.cpp | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index e0e390884..0ee16f359 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -687,7 +687,7 @@ void Tokenizer::simplifyTypedef() } // check for pointers and references - while (Token::Match(tokOffset, "*|&|const")) { + while (Token::Match(tokOffset, "*|&|&&|const")) { pointers.push_back(tokOffset->str()); tokOffset = tokOffset->next(); } diff --git a/test/testsimplifytokens.cpp b/test/testsimplifytokens.cpp index 990e5e722..27a8d1e0f 100644 --- a/test/testsimplifytokens.cpp +++ b/test/testsimplifytokens.cpp @@ -304,6 +304,7 @@ private: TEST_CASE(simplifyTypedef106); // ticket #3619 TEST_CASE(simplifyTypedef107); // ticket #3963 - bad code => segmentation fault TEST_CASE(simplifyTypedef108); // ticket #4777 + TEST_CASE(simplifyTypedef109); // ticket #1823 - rvalue reference TEST_CASE(simplifyTypedefFunction1); TEST_CASE(simplifyTypedefFunction2); // ticket #1685 @@ -5725,6 +5726,16 @@ private: ASSERT_EQUALS(expected, tok(code)); } + void simplifyTypedef109() { + const char code[] = "typedef int&& rref;\n" + "rref var;"; + const char expected[] = "int & & var ;"; + + checkSimplifyTypedef(code); + ASSERT_EQUALS(expected, tok(code)); + ASSERT_EQUALS("", errout.str()); + } + void simplifyTypedefFunction1() { { const char code[] = "typedef void (*my_func)();\n"