@@ -1496,12 +1496,82 @@ TEST_F(TokenAnnotatorTest, RequiresDoesNotChangeParsingOfTheRest) {
14961496
14971497TEST_F (TokenAnnotatorTest, UnderstandsAsm) {
14981498 auto Tokens = annotate (" __asm{\n "
1499- " a:\n "
1500- " };" );
1501- ASSERT_EQ (Tokens.size (), 7u ) << Tokens;
1499+ " \" a\" :\n "
1500+ " : x\n "
1501+ " :};" );
1502+ ASSERT_EQ (Tokens.size (), 10u ) << Tokens;
15021503 EXPECT_TOKEN (Tokens[0 ], tok::kw_asm, TT_Unknown);
15031504 EXPECT_TOKEN (Tokens[1 ], tok::l_brace, TT_InlineASMBrace);
1504- EXPECT_TOKEN (Tokens[4 ], tok::r_brace, TT_InlineASMBrace);
1505+ EXPECT_TOKEN (Tokens[3 ], tok::colon, TT_InlineASMColon);
1506+ EXPECT_TOKEN (Tokens[4 ], tok::colon, TT_InlineASMColon);
1507+ EXPECT_TOKEN (Tokens[6 ], tok::colon, TT_InlineASMColon);
1508+ EXPECT_TOKEN (Tokens[7 ], tok::r_brace, TT_InlineASMBrace);
1509+
1510+ Tokens = annotate (" __asm(\n "
1511+ " \" a\" :\n "
1512+ " : x\n "
1513+ " :);" );
1514+ ASSERT_EQ (Tokens.size (), 10u ) << Tokens;
1515+ EXPECT_TOKEN (Tokens[0 ], tok::kw_asm, TT_Unknown);
1516+ EXPECT_TOKEN (Tokens[3 ], tok::colon, TT_InlineASMColon);
1517+ EXPECT_TOKEN (Tokens[4 ], tok::colon, TT_InlineASMColon);
1518+ EXPECT_TOKEN (Tokens[6 ], tok::colon, TT_InlineASMColon);
1519+
1520+ Tokens = annotate (" asm volatile (\n "
1521+ " \" a_label:\"\n "
1522+ " :\n "
1523+ " : x\n "
1524+ " :);" );
1525+ ASSERT_EQ (Tokens.size (), 11u ) << Tokens;
1526+ EXPECT_TOKEN (Tokens[0 ], tok::kw_asm, TT_Unknown);
1527+ EXPECT_TOKEN (Tokens[4 ], tok::colon, TT_InlineASMColon);
1528+ EXPECT_TOKEN (Tokens[5 ], tok::colon, TT_InlineASMColon);
1529+ EXPECT_TOKEN (Tokens[7 ], tok::colon, TT_InlineASMColon);
1530+
1531+ Tokens = annotate (" __asm__(\n "
1532+ " \" a_label:\"\n "
1533+ " : x\n "
1534+ " :\n "
1535+ " : y);" );
1536+ ASSERT_EQ (Tokens.size (), 11u ) << Tokens;
1537+ EXPECT_TOKEN (Tokens[0 ], tok::kw_asm, TT_Unknown);
1538+ EXPECT_TOKEN (Tokens[3 ], tok::colon, TT_InlineASMColon);
1539+ EXPECT_TOKEN (Tokens[5 ], tok::colon, TT_InlineASMColon);
1540+ EXPECT_TOKEN (Tokens[6 ], tok::colon, TT_InlineASMColon);
1541+
1542+ Tokens = annotate (" __asm volatile (\n "
1543+ " \" a_label:\"\n "
1544+ " \" a b c(%%x)\"\n "
1545+ " :\n "
1546+ " : x\n "
1547+ " :);" );
1548+ ASSERT_EQ (Tokens.size (), 12u ) << Tokens;
1549+ EXPECT_TOKEN (Tokens[0 ], tok::kw_asm, TT_Unknown);
1550+ EXPECT_TOKEN (Tokens[5 ], tok::colon, TT_InlineASMColon);
1551+ EXPECT_TOKEN (Tokens[6 ], tok::colon, TT_InlineASMColon);
1552+ EXPECT_TOKEN (Tokens[8 ], tok::colon, TT_InlineASMColon);
1553+
1554+ Tokens = annotate (" asm(\n "
1555+ " \" insn\"\n "
1556+ " : \" =r\" (var1), \" =&r\" (value)\n "
1557+ " :\n "
1558+ " : \" memory\" );" );
1559+ ASSERT_EQ (Tokens.size (), 19u ) << Tokens;
1560+ EXPECT_TOKEN (Tokens[0 ], tok::kw_asm, TT_Unknown);
1561+ EXPECT_TOKEN (Tokens[3 ], tok::colon, TT_InlineASMColon);
1562+ EXPECT_TOKEN (Tokens[13 ], tok::colon, TT_InlineASMColon);
1563+ EXPECT_TOKEN (Tokens[14 ], tok::colon, TT_InlineASMColon);
1564+
1565+ Tokens = annotate (" __asm__ volatile (\n "
1566+ " \" ldr r1, [r0, %%[sym]]\"\n "
1567+ " :\n "
1568+ " : [sym] \" J\" (aaaaa(aaaa, aaaa))\n "
1569+ " );" );
1570+ ASSERT_EQ (Tokens.size (), 21u ) << Tokens;
1571+ EXPECT_TOKEN (Tokens[0 ], tok::kw_asm, TT_Unknown);
1572+ EXPECT_TOKEN (Tokens[4 ], tok::colon, TT_InlineASMColon);
1573+ EXPECT_TOKEN (Tokens[5 ], tok::colon, TT_InlineASMColon);
1574+ EXPECT_TOKEN (Tokens[6 ], tok::l_square, TT_InlineASMSymbolicNameLSquare);
15051575}
15061576
15071577TEST_F (TokenAnnotatorTest, UnderstandsObjCBlock) {
0 commit comments