diff --git a/clang/lib/Format/UnwrappedLineFormatter.cpp b/clang/lib/Format/UnwrappedLineFormatter.cpp --- a/clang/lib/Format/UnwrappedLineFormatter.cpp +++ b/clang/lib/Format/UnwrappedLineFormatter.cpp @@ -393,11 +393,16 @@ // Try to merge a block with left brace wrapped that wasn't yet covered if (TheLine->Last->is(tok::l_brace)) { + const FormatToken *Tok = TheLine->First; bool ShouldMerge = false; - if (TheLine->First->isOneOf(tok::kw_class, tok::kw_struct)) { + if (Tok && Tok->is(tok::kw_typedef)) + Tok = Tok->getNextNonComment(); + if (Tok && Tok->isOneOf(tok::kw_class, tok::kw_struct)) { ShouldMerge = !Style.BraceWrapping.AfterClass || (I[1]->First->is(tok::r_brace) && !Style.BraceWrapping.SplitEmptyRecord); + } else if (Tok && Tok->is(tok::kw_enum)) { + ShouldMerge = Style.AllowShortEnumsOnASingleLine; } else { ShouldMerge = !Style.BraceWrapping.AfterFunction || (I[1]->First->is(tok::r_brace) && diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -2511,6 +2511,10 @@ " C\n" "} ShortEnum1, ShortEnum2;", Style); + verifyFormat("enum {\n" + " A,\n" + "} ShortEnum1, ShortEnum2;", + Style); Style.BreakBeforeBraces = FormatStyle::BS_Custom; Style.BraceWrapping.AfterEnum = true; verifyFormat("enum\n"