forked from OSchip/llvm-project
[clang-format] Do not treat the asm clobber [ as ObjCExpr
Summary: The opening square of an inline asm clobber was being annotated as an ObjCExpr. This caused, amongst other things, the ObjCGuesser to guess header files containing that pattern as ObjC files. Reviewers: benhamilton Reviewed By: benhamilton Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D54111 llvm-svn: 346756
This commit is contained in:
parent
077a42ca9f
commit
28e2dbb14d
|
@ -404,8 +404,9 @@ private:
|
|||
Contexts.back().CanBeExpression && Left->isNot(TT_LambdaLSquare) &&
|
||||
!CurrentToken->isOneOf(tok::l_brace, tok::r_square) &&
|
||||
(!Parent ||
|
||||
Parent->isOneOf(tok::colon, tok::l_square, tok::l_paren,
|
||||
tok::kw_return, tok::kw_throw) ||
|
||||
(Parent->is(tok::colon) && Parent->isNot(TT_InlineASMColon)) ||
|
||||
Parent->isOneOf(tok::l_square, tok::l_paren, tok::kw_return,
|
||||
tok::kw_throw) ||
|
||||
Parent->isUnaryOperator() ||
|
||||
// FIXME(bug 36976): ObjC return types shouldn't use TT_CastRParen.
|
||||
Parent->isOneOf(TT_ObjCForIn, TT_CastRParen) ||
|
||||
|
|
|
@ -12755,6 +12755,21 @@ TEST_F(FormatTest, GuessLanguageWithCaret) {
|
|||
guessLanguage("foo.h", "int(^foo[(kNumEntries + 10)])(char, float);"));
|
||||
}
|
||||
|
||||
TEST_F(FormatTest, GuessedLanguageWithInlineAsmClobbers) {
|
||||
EXPECT_EQ(FormatStyle::LK_Cpp, guessLanguage("foo.h",
|
||||
"void f() {\n"
|
||||
" asm (\"mov %[e], %[d]\"\n"
|
||||
" : [d] \"=rm\" (d)\n"
|
||||
" [e] \"rm\" (*e));\n"
|
||||
"}"));
|
||||
EXPECT_EQ(FormatStyle::LK_Cpp,
|
||||
guessLanguage("foo.h", "void f() {\n"
|
||||
" asm volatile (\"mov %[e], %[d]\"\n"
|
||||
" : [d] \"=rm\" (d)\n"
|
||||
" [e] \"rm\" (*e));\n"
|
||||
"}"));
|
||||
}
|
||||
|
||||
TEST_F(FormatTest, GuessLanguageWithChildLines) {
|
||||
EXPECT_EQ(FormatStyle::LK_Cpp,
|
||||
guessLanguage("foo.h", "#define FOO ({ std::string s; })"));
|
||||
|
|
Loading…
Reference in New Issue