diff --git a/lib/Format/TokenAnnotator.cpp b/lib/Format/TokenAnnotator.cpp index db5924c8a5dcef3867d784a37a8f08b1877e6553..0b8f286ebe31176819b2b679c6b8cf208ee09f38 100644 --- a/lib/Format/TokenAnnotator.cpp +++ b/lib/Format/TokenAnnotator.cpp @@ -1111,12 +1111,12 @@ bool TokenAnnotator::canBreakBefore(const AnnotatedLine &Line, Left.Parent->is(tok::r_paren)) return !Right.isOneOf(tok::l_brace, tok::semi, tok::equal); + if (Right.is(tok::kw___attribute)) + return true; + // We only break before r_brace if there was a corresponding break before // the l_brace, which is tracked by BreakBeforeClosingBrace. - if (Right.is(tok::r_brace)) - return false; - - if (Right.isOneOf(tok::r_paren, tok::greater)) + if (Right.isOneOf(tok::r_brace, tok::r_paren, tok::greater)) return false; if (Left.is(tok::identifier) && Right.is(tok::string_literal)) return true; diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index 4e54212f992d1c0f254596153113ebbfa815e891..ac9dd64418480ee97e6ceb6d7eb21fbdd795b596 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -1387,15 +1387,23 @@ TEST_F(FormatTest, FormatsBuilderPattern) { TEST_F(FormatTest, DoesNotBreakTrailingAnnotation) { verifyFormat("void aaaaaaaaaaaa(int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)\n" - " GUARDED_BY(aaaaaaaaaaaaa);"); + " LOCKS_EXCLUDED(aaaaaaaaaaaaa);"); verifyFormat("void aaaaaaaaaaaa(int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) const\n" - " GUARDED_BY(aaaaaaaaaaaaa);"); + " LOCKS_EXCLUDED(aaaaaaaaaaaaa);"); verifyFormat("void aaaaaaaaaaaa(int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) const\n" - " GUARDED_BY(aaaaaaaaaaaaa) {}"); + " LOCKS_EXCLUDED(aaaaaaaaaaaaa) {}"); verifyFormat( "void aaaaaaaaaaaaaaaaaa()\n" " __attribute__((aaaaaaaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaaaaa,\n" " aaaaaaaaaaaaaaaaaaaaaaaaa));"); + verifyFormat("bool aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" + " __attribute__((unused));"); + + // FIXME: This is bad indentation, but generally hard to distinguish from a + // function declaration. + verifyFormat( + "bool aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" + "GUARDED_BY(aaaaaaaaaaaa);"); } TEST_F(FormatTest, BreaksAccordingToOperatorPrecedence) {