Skip to content

Commit 65f571f

Browse files
Fix #12615 FP syntaxError with operator= (#6295)
1 parent 7e60624 commit 65f571f

2 files changed

Lines changed: 5 additions & 1 deletion

File tree

lib/tokenize.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8636,7 +8636,7 @@ void Tokenizer::findGarbageCode() const
86368636
syntaxError(tok);
86378637
if (Token::Match(tok, "%assign% typename|class %assign%"))
86388638
syntaxError(tok);
8639-
if (Token::Match(tok, "%assign% [;)}]") && (!isCPP() || !Token::Match(tok->previous(), "operator %assign% ;")))
8639+
if (Token::Match(tok, "%assign% [;)}]") && (!isCPP() || !Token::simpleMatch(tok->previous(), "operator")))
86408640
syntaxError(tok);
86418641
if (Token::Match(tok, "%cop%|=|,|[ %or%|%oror%|/|%"))
86428642
syntaxError(tok);

test/testgarbage.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,7 @@ class TestGarbage : public TestFixture {
252252
TEST_CASE(garbageCode224);
253253
TEST_CASE(garbageCode225);
254254
TEST_CASE(garbageCode226);
255+
TEST_CASE(garbageCode227);
255256

256257
TEST_CASE(garbageCodeFuzzerClientMode1); // test cases created with the fuzzer client, mode 1
257258

@@ -1753,6 +1754,9 @@ class TestGarbage : public TestFixture {
17531754
ASSERT_THROW_INTERNAL(checkCode("int a() { (b((c)\\)) } {}"), SYNTAX);
17541755
ASSERT_THROW_INTERNAL(checkCode("int a() { (b((c)@)) } {}"), SYNTAX);
17551756
}
1757+
void garbageCode227() { // #12615
1758+
ASSERT_NO_THROW(checkCode("f(&S::operator=);"));
1759+
}
17561760

17571761
void syntaxErrorFirstToken() {
17581762
ASSERT_THROW_INTERNAL(checkCode("&operator(){[]};"), SYNTAX); // #7818

0 commit comments

Comments
 (0)