@@ -390,6 +390,55 @@ TEST_F(TokenAnnotatorTest, UnderstandsFunctionRefQualifiers) {
390390 EXPECT_TOKEN (Tokens[11 ], tok::amp, TT_PointerOrReference);
391391}
392392
393+ TEST_F (TokenAnnotatorTest, UnderstandsOverloadedOperators) {
394+ auto Tokens = annotate (" x.operator+()" );
395+ ASSERT_EQ (Tokens.size (), 7u ) << Tokens;
396+ EXPECT_TOKEN (Tokens[3 ], tok::plus, TT_OverloadedOperator);
397+ EXPECT_TOKEN (Tokens[4 ], tok::l_paren, TT_OverloadedOperatorLParen);
398+ Tokens = annotate (" x.operator=()" );
399+ ASSERT_EQ (Tokens.size (), 7u ) << Tokens;
400+ EXPECT_TOKEN (Tokens[3 ], tok::equal, TT_OverloadedOperator);
401+ EXPECT_TOKEN (Tokens[4 ], tok::l_paren, TT_OverloadedOperatorLParen);
402+ Tokens = annotate (" x.operator+=()" );
403+ ASSERT_EQ (Tokens.size (), 7u ) << Tokens;
404+ EXPECT_TOKEN (Tokens[3 ], tok::plusequal, TT_OverloadedOperator);
405+ EXPECT_TOKEN (Tokens[4 ], tok::l_paren, TT_OverloadedOperatorLParen);
406+ Tokens = annotate (" x.operator,()" );
407+ ASSERT_EQ (Tokens.size (), 7u ) << Tokens;
408+ EXPECT_TOKEN (Tokens[3 ], tok::comma, TT_OverloadedOperator);
409+ EXPECT_TOKEN (Tokens[4 ], tok::l_paren, TT_OverloadedOperatorLParen);
410+ Tokens = annotate (" x.operator()()" );
411+ ASSERT_EQ (Tokens.size (), 8u ) << Tokens;
412+ EXPECT_TOKEN (Tokens[3 ], tok::l_paren, TT_OverloadedOperator);
413+ EXPECT_TOKEN (Tokens[4 ], tok::r_paren, TT_OverloadedOperator);
414+ EXPECT_TOKEN (Tokens[5 ], tok::l_paren, TT_OverloadedOperatorLParen);
415+ Tokens = annotate (" x.operator[]()" );
416+ ASSERT_EQ (Tokens.size (), 8u ) << Tokens;
417+ // EXPECT_TOKEN(Tokens[3], tok::l_square, TT_OverloadedOperator);
418+ // EXPECT_TOKEN(Tokens[4], tok::r_square, TT_OverloadedOperator);
419+ EXPECT_TOKEN (Tokens[5 ], tok::l_paren, TT_OverloadedOperatorLParen);
420+ Tokens = annotate (" x.operator\"\" _a()" );
421+ ASSERT_EQ (Tokens.size (), 7u ) << Tokens;
422+ EXPECT_TOKEN (Tokens[3 ], tok::string_literal, TT_OverloadedOperator);
423+ EXPECT_TOKEN (Tokens[4 ], tok::l_paren, TT_OverloadedOperatorLParen);
424+ Tokens = annotate (" x.operator\"\" _a()" );
425+ ASSERT_EQ (Tokens.size (), 8u ) << Tokens;
426+ EXPECT_TOKEN (Tokens[3 ], tok::string_literal, TT_OverloadedOperator);
427+ EXPECT_TOKEN (Tokens[5 ], tok::l_paren, TT_OverloadedOperatorLParen);
428+ Tokens = annotate (" x.operator\"\" if()" );
429+ ASSERT_EQ (Tokens.size (), 7u ) << Tokens;
430+ EXPECT_TOKEN (Tokens[3 ], tok::string_literal, TT_OverloadedOperator);
431+ EXPECT_TOKEN (Tokens[4 ], tok::l_paren, TT_OverloadedOperatorLParen);
432+ Tokens = annotate (" x.operator\"\" s()" );
433+ ASSERT_EQ (Tokens.size (), 7u ) << Tokens;
434+ EXPECT_TOKEN (Tokens[3 ], tok::string_literal, TT_OverloadedOperator);
435+ EXPECT_TOKEN (Tokens[4 ], tok::l_paren, TT_OverloadedOperatorLParen);
436+ Tokens = annotate (" x.operator\"\" s()" );
437+ ASSERT_EQ (Tokens.size (), 8u ) << Tokens;
438+ EXPECT_TOKEN (Tokens[3 ], tok::string_literal, TT_OverloadedOperator);
439+ EXPECT_TOKEN (Tokens[5 ], tok::l_paren, TT_OverloadedOperatorLParen);
440+ }
441+
393442TEST_F (TokenAnnotatorTest, UnderstandsRequiresClausesAndConcepts) {
394443 auto Tokens = annotate (" template <typename T>\n "
395444 " concept C = (Foo && Bar) && (Bar && Baz);" );
0 commit comments