Fixes PR 17106 (explicitly typed enums are formatted differently).
authorManuel Klimek <klimek@google.com>
Thu, 5 Sep 2013 15:34:55 +0000 (15:34 +0000)
committerManuel Klimek <klimek@google.com>
Thu, 5 Sep 2013 15:34:55 +0000 (15:34 +0000)
Before:
 enum X : int { A, B, C };

After:
 enum X : int {
   A,
   B,
   C
 };

llvm-svn: 190054

clang/lib/Format/UnwrappedLineParser.cpp
clang/unittests/Format/FormatTest.cpp

index 5029bd6..766e1d8 100644 (file)
@@ -1035,9 +1035,7 @@ void UnwrappedLineParser::parseEnum() {
   if (FormatTok->Tok.is(tok::kw_class) ||
       FormatTok->Tok.is(tok::kw_struct))
       nextToken();
-  if (FormatTok->Tok.is(tok::identifier) ||
-      FormatTok->Tok.is(tok::kw___attribute) ||
-      FormatTok->Tok.is(tok::kw___declspec)) {
+  while (FormatTok->Tok.getIdentifierInfo() || FormatTok->Tok.is(tok::colon)) {
     nextToken();
     // We can have macros or attributes in between 'enum' and the enum name.
     if (FormatTok->Tok.is(tok::l_paren)) {
index 2307b03..6d953eb 100644 (file)
@@ -1573,6 +1573,13 @@ TEST_F(FormatTest, FormatsEnumClass) {
   verifyFormat("enum class X f() {\n  a();\n  return 42;\n}");
 }
 
+TEST_F(FormatTest, FormatsEnumTypes) {
+  verifyFormat("enum X : int {\n"
+               "  A,\n"
+               "  B\n"
+               "};");
+}
+
 TEST_F(FormatTest, FormatsBitfields) {
   verifyFormat("struct Bitfields {\n"
                "  unsigned sClass : 8;\n"