Parser; do not remove alignof and alignas in the same way

This commit is contained in:
Daniel Marjamäki 2021-04-26 11:43:49 +02:00
parent b18e6f1e10
commit b798b99777
2 changed files with 11 additions and 6 deletions

View File

@ -11006,10 +11006,8 @@ void Tokenizer::removeAlignas()
return; return;
for (Token *tok = list.front(); tok; tok = tok->next()) { for (Token *tok = list.front(); tok; tok = tok->next()) {
if (Token::Match(tok, "alignas|alignof (")) { if (Token::Match(tok, "[;{}] alignas (") && Token::Match(tok->linkAt(2), ") %name%"))
Token::eraseTokens(tok, tok->linkAt(1)->next()); Token::eraseTokens(tok, tok->linkAt(2)->next());
tok->deleteThis();
}
} }
} }

View File

@ -416,7 +416,8 @@ private:
TEST_CASE(removeExtraTemplateKeywords); TEST_CASE(removeExtraTemplateKeywords);
TEST_CASE(removeAlignas); TEST_CASE(removeAlignas1);
TEST_CASE(removeAlignas2); // Do not remove alignof in the same way
TEST_CASE(simplifyCoroutines); TEST_CASE(simplifyCoroutines);
@ -6524,12 +6525,18 @@ private:
ASSERT_EQUALS(expected2, tokenizeAndStringify(code2)); ASSERT_EQUALS(expected2, tokenizeAndStringify(code2));
} }
void removeAlignas() { void removeAlignas1() {
const char code[] = "alignas(float) unsigned char c[sizeof(float)];"; const char code[] = "alignas(float) unsigned char c[sizeof(float)];";
const char expected[] = "unsigned char c [ sizeof ( float ) ] ;"; const char expected[] = "unsigned char c [ sizeof ( float ) ] ;";
ASSERT_EQUALS(expected, tokenizeAndStringify(code)); ASSERT_EQUALS(expected, tokenizeAndStringify(code));
} }
void removeAlignas2() { // Do not remove alignas and alignof in the same way
const char code[] = "static_assert( alignof( VertexC ) == 4 );";
const char expected[] = "static_assert ( alignof ( VertexC ) == 4 ) ;";
ASSERT_EQUALS(expected, tokenizeAndStringify(code));
}
void simplifyCoroutines() { void simplifyCoroutines() {
Settings settings; Settings settings;
settings.standards.cpp = Standards::CPP20; settings.standards.cpp = Standards::CPP20;