File tree Expand file tree Collapse file tree 2 files changed +14
-0
lines changed Expand file tree Collapse file tree 2 files changed +14
-0
lines changed Original file line number Diff line number Diff line change @@ -9585,6 +9585,10 @@ void Tokenizer::simplifyKeyword()
9585
9585
9586
9586
if (mSettings .standards .c >= Standards::C11) {
9587
9587
while (tok->str () == " _Atomic" ) {
9588
+ if (Token::simpleMatch (tok->next (), " (" )) {
9589
+ tok->linkAt (1 )->deleteThis ();
9590
+ tok->next ()->deleteThis ();
9591
+ }
9588
9592
for (Token* temp: getTypeTokens ())
9589
9593
temp->isAtomic (true );
9590
9594
tok->deleteThis ();
Original file line number Diff line number Diff line change @@ -471,6 +471,8 @@ class TestTokenizer : public TestFixture {
471
471
TEST_CASE (genericInIf); // #13561
472
472
473
473
TEST_CASE (preincrementInLambda); // #13312
474
+
475
+ TEST_CASE (atomicCast); // #12605
474
476
}
475
477
476
478
#define tokenizeAndStringify (...) tokenizeAndStringify_(__FILE__, __LINE__, __VA_ARGS__)
@@ -8431,6 +8433,14 @@ class TestTokenizer : public TestFixture {
8431
8433
" }\n " ;
8432
8434
ASSERT_NO_THROW (tokenizeAndStringify (code));
8433
8435
}
8436
+
8437
+ void atomicCast () { // #12605
8438
+ const char code[] = " int atomic_add_int(int *ptr, int v)\n "
8439
+ " {\n "
8440
+ " return atomic_fetch_add((_Atomic(unsigned int) *)ptr, v) + v;\n "
8441
+ " }\n " ;
8442
+ ASSERT_NO_THROW (tokenizeAndStringify (code, settingsDefault, false ));
8443
+ }
8434
8444
};
8435
8445
8436
8446
REGISTER_TEST (TestTokenizer)
You can’t perform that action at this time.
0 commit comments