Skip to content

Commit cd4c297

Browse files
committed
Fix segfault in template simplifier
When something parsing the template syntax went wrong, "tok2" was NULL and resulted in deleting all remaining tokens. Whoops. Triggered by gcc test suite: gcc/testsuite/g++.dg/cpp0x/variadic87.C Tracked down the source of the bug with valgrind's "--track-origins=yes" switch.
1 parent 58cb6cc commit cd4c297

1 file changed

Lines changed: 5 additions & 0 deletions

File tree

lib/templatesimplifier.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -658,6 +658,11 @@ void TemplateSimplifier::useDefaultArgumentValues(const std::list<Token *> &temp
658658
if (indentlevel < 0)
659659
break;
660660
}
661+
// something went wrong, don't call eraseTokens()
662+
// with a nullptr "end" parameter (=all remaining tokens).
663+
if (!tok2)
664+
continue;
665+
661666
Token::eraseTokens(eqtok, tok2);
662667
eqtok->deleteThis();
663668
}

0 commit comments

Comments
 (0)