Fix 10664: Crash in Token::linkAt (#3708)
* Fix 10664: Crash in Token::linkAt * Format
This commit is contained in:
parent
2b6a89e30e
commit
0b1cd8626d
|
@ -4554,7 +4554,8 @@ void Tokenizer::createLinks2()
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
type.pop();
|
type.pop();
|
||||||
if (Token::Match(token, "> %name%") && Token::Match(top1->tokAt(-2), "%op% %name% <") &&
|
if (Token::Match(token, "> %name%") && !token->next()->isKeyword() &&
|
||||||
|
Token::Match(top1->tokAt(-2), "%op% %name% <") &&
|
||||||
(templateTokens.empty() || top1 != templateTokens.top()))
|
(templateTokens.empty() || top1 != templateTokens.top()))
|
||||||
continue;
|
continue;
|
||||||
Token::createMutualLinks(top1, token);
|
Token::createMutualLinks(top1, token);
|
||||||
|
|
|
@ -3375,6 +3375,19 @@ private:
|
||||||
ASSERT_EQUALS(true, tok1->link() == tok2);
|
ASSERT_EQUALS(true, tok1->link() == tok2);
|
||||||
ASSERT_EQUALS(true, tok2->link() == tok1);
|
ASSERT_EQUALS(true, tok2->link() == tok1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// #10664
|
||||||
|
const char code[] = "class C1 : public T1<D2<C2>const> {};\n";
|
||||||
|
errout.str("");
|
||||||
|
Tokenizer tokenizer(&settings0, this);
|
||||||
|
std::istringstream istr(code);
|
||||||
|
ASSERT(tokenizer.tokenize(istr, "test.cpp"));
|
||||||
|
const Token* tok1 = Token::findsimplematch(tokenizer.tokens(), "< C2");
|
||||||
|
const Token* tok2 = Token::findsimplematch(tok1, "> const");
|
||||||
|
ASSERT_EQUALS(true, tok1->link() == tok2);
|
||||||
|
ASSERT_EQUALS(true, tok2->link() == tok1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void simplifyString() {
|
void simplifyString() {
|
||||||
|
|
Loading…
Reference in New Issue