Author: mydeveloperday Date: 2020-09-17T13:23:06+01:00 New Revision: 40e771c1c0d33c687230111271060c2ba761269f
URL: https://github.com/llvm/llvm-project/commit/40e771c1c0d33c687230111271060c2ba761269f DIFF: https://github.com/llvm/llvm-project/commit/40e771c1c0d33c687230111271060c2ba761269f.diff LOG: [clang-format][regression][PR47461] ifdef causes catch to be seen as a function https://bugs.llvm.org/show_bug.cgi?id=47461 The following change {D80940} caused a regression in code which ifdef's around the try and catch block cause incorrect brace placement around the catch ``` try { } catch (...) { // This is not a small function bar = 1; } } ``` The brace after the catch will be placed on a newline Reviewed By: curdeius Differential Revision: https://reviews.llvm.org/D87291 Added: Modified: clang/lib/Format/FormatTokenLexer.cpp clang/unittests/Format/FormatTest.cpp Removed: ################################################################################ diff --git a/clang/lib/Format/FormatTokenLexer.cpp b/clang/lib/Format/FormatTokenLexer.cpp index f6db58acd8db..c1466196b4d6 100644 --- a/clang/lib/Format/FormatTokenLexer.cpp +++ b/clang/lib/Format/FormatTokenLexer.cpp @@ -401,7 +401,7 @@ bool FormatTokenLexer::tryTransformTryUsageForC() { if (!Try->is(tok::kw_try)) return false; auto &Next = *(Tokens.end() - 1); - if (Next->isOneOf(tok::l_brace, tok::colon)) + if (Next->isOneOf(tok::l_brace, tok::colon, tok::hash, tok::comment)) return false; if (Tokens.size() > 2) { diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 98e002003159..eae7b24fae7c 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -2743,6 +2743,43 @@ TEST_F(FormatTest, FormatTryAsAVariable) { verifyFormat("int catch, size;"); verifyFormat("catch = foo();"); verifyFormat("if (catch < size) {\n return true;\n}"); + + FormatStyle Style = getLLVMStyle(); + Style.BreakBeforeBraces = FormatStyle::BS_Custom; + Style.BraceWrapping.AfterFunction = true; + Style.BraceWrapping.BeforeCatch = true; + verifyFormat("try {\n" + " int bar = 1;\n" + "}\n" + "catch (...) {\n" + " int bar = 1;\n" + "}", + Style); + verifyFormat("#if NO_EX\n" + "try\n" + "#endif\n" + "{\n" + "}\n" + "#if NO_EX\n" + "catch (...) {\n" + "}", + Style); + verifyFormat("try /* abc */ {\n" + " int bar = 1;\n" + "}\n" + "catch (...) {\n" + " int bar = 1;\n" + "}", + Style); + verifyFormat("try\n" + "// abc\n" + "{\n" + " int bar = 1;\n" + "}\n" + "catch (...) {\n" + " int bar = 1;\n" + "}", + Style); } TEST_F(FormatTest, FormatSEHTryCatch) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits