diff options
-rw-r--r-- | lib/Format/Format.cpp | 5 | ||||
-rw-r--r-- | unittests/Format/FormatTest.cpp | 40 |
2 files changed, 42 insertions, 3 deletions
diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp index 8faa93cdc7..7a6b6e2081 100644 --- a/lib/Format/Format.cpp +++ b/lib/Format/Format.cpp @@ -808,9 +808,8 @@ private: TokenAnnotation &Annotation = Annotations[i]; const FormatToken &Tok = Line.Tokens[i]; - if (getPrecedence(Tok) == prec::Assignment) - IsRHS = true; - else if (Tok.Tok.is(tok::kw_return)) + if (getPrecedence(Tok) == prec::Assignment || + Tok.Tok.is(tok::kw_return) || Tok.Tok.is(tok::kw_throw)) IsRHS = true; if (Annotation.Type != TT_Unknown) diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index 17e98741fd..d4490dddfc 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -377,6 +377,46 @@ TEST_F(FormatTest, FormatsNamespaces) { "}"); } +TEST_F(FormatTest, FormatTryCatch) { + verifyFormat("try {\n" + " throw a * b;\n" + "}\n" + "catch (int a) {\n" + " // Do nothing.\n" + "}\n" + "catch (...) {\n" + " exit(42);\n" + "}"); + + // Function-level try statements. + verifyFormat("int f() try {\n" + " return 4;\n" + "}\n" + "catch (...) {\n" + " return 5;\n" + "}"); + verifyFormat("class A {\n" + " int a;\n" + " A() try : a(0) {\n" + " }\n" + " catch (...) {\n" + " throw;\n" + " }\n" + "};\n"); +} + +TEST_F(FormatTest, FormatObjCTryCatch) { + verifyFormat("@try {\n" + " f();\n" + "}\n" + "@catch (NSException e) {\n" + " @throw;\n" + "}\n" + "@finally {\n" + " exit(42);\n" + "}"); +} + TEST_F(FormatTest, StaticInitializers) { verifyFormat("static SomeClass SC = { 1, 'a' };"); |