Fixed #3608 (unreadVariable when variable used in inline assembly)
This commit is contained in:
parent
69d03bac34
commit
39b0f1ba95
|
@ -8643,13 +8643,15 @@ void Tokenizer::simplifyAsm()
|
|||
Token::eraseTokens(tok, partok->link()->next());
|
||||
}
|
||||
|
||||
else if (Token::simpleMatch(tok, "__asm")) {
|
||||
else if (Token::Match(tok, "_asm|__asm")) {
|
||||
const Token *tok2 = tok;
|
||||
while (tok2 && (tok2->isNumber() || tok2->isName() || tok2->str() == ","))
|
||||
while (tok2 && tok2->linenr() == tok->linenr() && (tok2->isNumber() || tok2->isName() || tok2->str() == ","))
|
||||
tok2 = tok2->next();
|
||||
if (tok2 && tok2->str() == ";") {
|
||||
if (!tok2 || tok2->str() == ";" || tok2->linenr() != tok->linenr()) {
|
||||
instruction = tok->next()->stringify(tok2);
|
||||
Token::eraseTokens(tok, tok2);
|
||||
if (!tok2 || tok2->str() != ";")
|
||||
tok->insertToken(";");
|
||||
} else
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -784,6 +784,7 @@ private:
|
|||
void inlineasm() {
|
||||
ASSERT_EQUALS("asm ( \"mov ax , bx\" ) ;", tokenizeAndStringify("asm { mov ax,bx };"));
|
||||
ASSERT_EQUALS("asm ( \"mov ax , bx\" ) ;", tokenizeAndStringify("_asm { mov ax,bx };"));
|
||||
ASSERT_EQUALS("asm ( \"mov ax , bx\" ) ;", tokenizeAndStringify("_asm mov ax,bx"));
|
||||
ASSERT_EQUALS("asm ( \"mov ax , bx\" ) ;", tokenizeAndStringify("__asm { mov ax,bx };"));
|
||||
ASSERT_EQUALS("asm ( \"\"mov ax,bx\"\" ) ;", tokenizeAndStringify("__asm__ __volatile__ ( \"mov ax,bx\" );"));
|
||||
ASSERT_EQUALS("asm ( \"_emit 12h\" ) ;", tokenizeAndStringify("__asm _emit 12h ;"));
|
||||
|
|
Loading…
Reference in New Issue