Fixed use-after-free in clang test suite introduced recently (#7087)
This commit is contained in:
parent
b97f9e576d
commit
8374e8414b
|
@ -9294,7 +9294,9 @@ void Tokenizer::simplifyAsm2()
|
||||||
for (Token *tok = list.front(); tok; tok = tok->next()) {
|
for (Token *tok = list.front(); tok; tok = tok->next()) {
|
||||||
if (Token::simpleMatch(tok, "^ {")) {
|
if (Token::simpleMatch(tok, "^ {")) {
|
||||||
Token * start = tok;
|
Token * start = tok;
|
||||||
while (start && !Token::Match(start, "[;{})=]")) {
|
while (start && !Token::Match(start, "[;{}=]")) {
|
||||||
|
if (start->link() && start->str() == ")")
|
||||||
|
start = start->link();
|
||||||
start = start->previous();
|
start = start->previous();
|
||||||
}
|
}
|
||||||
if (start)
|
if (start)
|
||||||
|
@ -9302,8 +9304,11 @@ void Tokenizer::simplifyAsm2()
|
||||||
const Token *last = tok->next()->link();
|
const Token *last = tok->next()->link();
|
||||||
if (start != tok) {
|
if (start != tok) {
|
||||||
last = last->next();
|
last = last->next();
|
||||||
while (last && !Token::Match(last->next(), "[;{})]"))
|
while (last && !Token::Match(last, "[;{})]")) {
|
||||||
last = last->next();
|
last = last->next();
|
||||||
|
if (last && last->link() && last->str() == "(")
|
||||||
|
last = last->link()->next();
|
||||||
|
}
|
||||||
if (last)
|
if (last)
|
||||||
last = last->next();
|
last = last->next();
|
||||||
}
|
}
|
||||||
|
|
|
@ -657,8 +657,8 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
void garbageCode58() { // #6732, #6762
|
void garbageCode58() { // #6732, #6762
|
||||||
checkCode("{ }> {= ~A()^{} }P { }");
|
ASSERT_THROW(checkCode("{ }> {= ~A()^{} }P { }"), InternalError);
|
||||||
checkCode("{= ~A()^{} }P { } { }> is");
|
ASSERT_THROW(checkCode("{= ~A()^{} }P { } { }> is"), InternalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
void garbageCode59() { // #6735
|
void garbageCode59() { // #6735
|
||||||
|
|
|
@ -776,10 +776,11 @@ private:
|
||||||
void tokenize28() {
|
void tokenize28() {
|
||||||
ASSERT_EQUALS("void f ( ) { asm ( \"^{}\" ) ; }", tokenizeAndStringify("void f() { ^{} }"));
|
ASSERT_EQUALS("void f ( ) { asm ( \"^{}\" ) ; }", tokenizeAndStringify("void f() { ^{} }"));
|
||||||
ASSERT_EQUALS("void f ( ) { asm ( \"x(^{});\" ) ; }", tokenizeAndStringify("void f() { x(^{}); }"));
|
ASSERT_EQUALS("void f ( ) { asm ( \"x(^{});\" ) ; }", tokenizeAndStringify("void f() { x(^{}); }"));
|
||||||
|
ASSERT_EQUALS("void f ( ) { asm ( \"foo(A(),^{bar();});\" ) ; }", tokenizeAndStringify("void f() { foo(A(), ^{ bar(); }); }"));
|
||||||
ASSERT_EQUALS("int f0 ( Args args ) {\n"
|
ASSERT_EQUALS("int f0 ( Args args ) {\n"
|
||||||
"asm ( \"return^{returnsizeof...(Args);}()\" ) ;\n"
|
"asm ( \"return^{returnsizeof...(Args);}()+\" ) ;\n"
|
||||||
"\n"
|
"\n"
|
||||||
"asm ( \"+^{returnsizeof...(args);}()\" ) ;\n"
|
"asm ( \"^{returnsizeof...(args);}\" ) ;\n"
|
||||||
"\n"
|
"\n"
|
||||||
"\n"
|
"\n"
|
||||||
"} ;", tokenizeAndStringify("int f0(Args args) {\n"
|
"} ;", tokenizeAndStringify("int f0(Args args) {\n"
|
||||||
|
|
Loading…
Reference in New Issue