Skip to content

Commit dd67935

Browse files
committed
Partial fix for #14842 FN memleak in function with trailing return type (regression)
1 parent 9becbb6 commit dd67935

2 files changed

Lines changed: 16 additions & 0 deletions

File tree

lib/tokenize.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7368,6 +7368,8 @@ void Tokenizer::simplifyVarDecl(Token * tokBegin, const Token * const tokEnd, co
73687368
Token* lambdaEnd = findLambdaEndScope(lambdaStart);
73697369
if (lambdaEnd)
73707370
simplifyVarDecl(lambdaEnd->link()->next(), lambdaEnd, only_k_r_fpar);
7371+
else
7372+
simplifyVarDecl(tok->tokAt(2), tok->linkAt(1), only_k_r_fpar);
73717373
} else {
73727374
for (Token* tok2 = tok->next(); tok2 != tok->linkAt(1); tok2 = tok2->next()) {
73737375
Token* lambdaEnd = findLambdaEndScope(tok2);

test/testtokenize.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,7 @@ class TestTokenizer : public TestFixture {
233233
TEST_CASE(vardecl32);
234234
TEST_CASE(vardecl33);
235235
TEST_CASE(vardecl34);
236+
TEST_CASE(vardecl35);
236237
TEST_CASE(vardecl_stl_1);
237238
TEST_CASE(vardecl_stl_2);
238239
TEST_CASE(vardecl_stl_3);
@@ -2856,6 +2857,19 @@ class TestTokenizer : public TestFixture {
28562857
ASSERT_EQUALS("enum Anonymous0 { E } ; static enum Anonymous0 const * f ( ) { return NULL ; }", tokenizeAndStringify(code, dinit(TokenizeOptions, $.cpp = false)));
28572858
}
28582859
}
2860+
void vardecl35() { // #14842
2861+
{
2862+
const char code[] = "auto f() -> void {\n"
2863+
" auto p = new int;\n"
2864+
" *p = 0;\n"
2865+
"}\n";
2866+
ASSERT_EQUALS("auto f ( ) . void {\n"
2867+
"auto p ; p = new int ;\n"
2868+
"* p = 0 ;\n"
2869+
"}", tokenizeAndStringify(code));
2870+
ignore_errout();
2871+
}
2872+
}
28592873

28602874
void volatile_variables() {
28612875
{

0 commit comments

Comments
 (0)