Unused templates: Remove unused template function with variadic arguments
This commit is contained in:
parent
7237acdb47
commit
83106d5827
|
@ -4852,8 +4852,11 @@ void Tokenizer::simplifyHeaders()
|
||||||
if (removeUnusedTemplates || (isIncluded && removeUnusedIncludedTemplates)) {
|
if (removeUnusedTemplates || (isIncluded && removeUnusedIncludedTemplates)) {
|
||||||
if (Token::Match(tok->next(), "template < %name%")) {
|
if (Token::Match(tok->next(), "template < %name%")) {
|
||||||
const Token *tok2 = tok->tokAt(3);
|
const Token *tok2 = tok->tokAt(3);
|
||||||
while (Token::Match(tok2, "%name% %name% [,=>]")) {
|
while (Token::Match(tok2, "%name% %name% [,=>]") || Token::Match(tok2, "typename . . . %name% [,>]")) {
|
||||||
tok2 = tok2->tokAt(2);
|
if (Token::simpleMatch(tok2, "typename . . ."))
|
||||||
|
tok2 = tok2->tokAt(5);
|
||||||
|
else
|
||||||
|
tok2 = tok2->tokAt(2);
|
||||||
if (Token::Match(tok2, "= %name% [,>]"))
|
if (Token::Match(tok2, "= %name% [,>]"))
|
||||||
tok2 = tok2->tokAt(2);
|
tok2 = tok2->tokAt(2);
|
||||||
if (tok2->str() == ",")
|
if (tok2->str() == ",")
|
||||||
|
@ -4870,6 +4873,9 @@ void Tokenizer::simplifyHeaders()
|
||||||
endToken = endToken->link()->next();
|
endToken = endToken->link()->next();
|
||||||
if (endToken && endToken->str() == ";")
|
if (endToken && endToken->str() == ";")
|
||||||
Token::eraseTokens(tok, endToken);
|
Token::eraseTokens(tok, endToken);
|
||||||
|
} else if (Token::Match(tok2, "> %type% %name% (") && Token::simpleMatch(tok2->linkAt(3), ") {") && keep.find(tok2->strAt(2)) == keep.end()) {
|
||||||
|
const Token *endToken = tok2->linkAt(3)->linkAt(1)->next();
|
||||||
|
Token::eraseTokens(tok, endToken);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,6 +92,8 @@ private:
|
||||||
|
|
||||||
TEST_CASE(longtok);
|
TEST_CASE(longtok);
|
||||||
|
|
||||||
|
TEST_CASE(removeUnusedTemplates);
|
||||||
|
|
||||||
TEST_CASE(simplifyCasts1);
|
TEST_CASE(simplifyCasts1);
|
||||||
TEST_CASE(simplifyCasts2);
|
TEST_CASE(simplifyCasts2);
|
||||||
TEST_CASE(simplifyCasts3);
|
TEST_CASE(simplifyCasts3);
|
||||||
|
@ -550,6 +552,18 @@ private:
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string tokenizeAndStringify(const char code[], const Settings &settings) {
|
||||||
|
errout.str("");
|
||||||
|
|
||||||
|
// tokenize..
|
||||||
|
Tokenizer tokenizer(&settings, this);
|
||||||
|
std::istringstream istr(code);
|
||||||
|
tokenizer.tokenize(istr, "test.cpp");
|
||||||
|
if (!tokenizer.tokens())
|
||||||
|
return "";
|
||||||
|
return tokenizer.tokens()->stringifyList(false, true, false, true, false, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
std::string tokenizeDebugListing(const char code[], bool simplify = false, const char filename[] = "test.cpp") {
|
std::string tokenizeDebugListing(const char code[], bool simplify = false, const char filename[] = "test.cpp") {
|
||||||
errout.str("");
|
errout.str("");
|
||||||
|
|
||||||
|
@ -974,6 +988,16 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void removeUnusedTemplates() {
|
||||||
|
Settings s;
|
||||||
|
s.removeUnusedTemplates = true;
|
||||||
|
ASSERT_EQUALS(";",
|
||||||
|
tokenizeAndStringify("; template <typename... a> uint8_t b(std::tuple<uint8_t> d) {\n"
|
||||||
|
" std::tuple<a...> c{std::move(d)};\n"
|
||||||
|
" return std::get<0>(c);\n"
|
||||||
|
"}", s));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Don’t remove "(int *)"..
|
// Don’t remove "(int *)"..
|
||||||
void simplifyCasts1() {
|
void simplifyCasts1() {
|
||||||
|
|
Loading…
Reference in New Issue