diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp index c725b4bf30ab2428efcc9ee652ec0d31c25238ba..a774f8cdd59aca2f3238204b25c5de5b4d655132 100644 --- a/lib/Format/Format.cpp +++ b/lib/Format/Format.cpp @@ -1122,7 +1122,10 @@ private: Column = FormatTok->LastLineColumnWidth; } - if (std::find(ForEachMacros.begin(), ForEachMacros.end(), + if (!(Tokens.size() > 0 && Tokens.back()->Tok.getIdentifierInfo() && + Tokens.back()->Tok.getIdentifierInfo()->getPPKeywordID() == + tok::pp_define) && + std::find(ForEachMacros.begin(), ForEachMacros.end(), FormatTok->Tok.getIdentifierInfo()) != ForEachMacros.end()) FormatTok->Type = TT_ForEachMacro; diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index c4aa712ba1d580b36da6f5cc744b745fd872f832..5b3980bdb5f44ddb6e729f60789a1f0168a399bf 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -616,6 +616,18 @@ TEST_F(FormatTest, ForEachLoops) { " BOOST_FOREACH (Item *item, itemlist) {}\n" " UNKNOWN_FORACH(Item * item, itemlist) {}\n" "}"); + + // As function-like macros. + verifyFormat("#define foreach(x, y)\n" + "#define Q_FOREACH(x, y)\n" + "#define BOOST_FOREACH(x, y)\n" + "#define UNKNOWN_FOREACH(x, y)\n"); + + // Not as function-like macros. + verifyFormat("#define foreach (x, y)\n" + "#define Q_FOREACH (x, y)\n" + "#define BOOST_FOREACH (x, y)\n" + "#define UNKNOWN_FOREACH (x, y)\n"); } TEST_F(FormatTest, FormatsWhileLoop) {