rymiel created this revision. rymiel added reviewers: HazardyKnusperkeks, owenpan, MyDeveloperDay, curdeius. Herald added a project: All. rymiel requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
This makes `throw` more similar to `return`. However, unlike `return`, it has to more strict as to not remove spaces after usages of `throw` as a (deprecated) exception specifier. Fixes https://github.com/llvm/llvm-project/issues/57391 Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D132762 Files: clang/lib/Format/TokenAnnotator.cpp clang/unittests/Format/FormatTest.cpp Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -10958,6 +10958,7 @@ verifyFormat("my_int a = (my_int)2.0f;"); verifyFormat("my_int a = (my_int)sizeof(int);"); verifyFormat("return (my_int)aaa;"); + verifyFormat("throw (my_int)aaa;"); verifyFormat("#define x ((int)-1)"); verifyFormat("#define LENGTH(x, y) (x) - (y) + 1"); verifyFormat("#define p(q) ((int *)&q)"); Index: clang/lib/Format/TokenAnnotator.cpp =================================================================== --- clang/lib/Format/TokenAnnotator.cpp +++ clang/lib/Format/TokenAnnotator.cpp @@ -2153,7 +2153,7 @@ // before the parentheses, this is unlikely to be a cast. if (LeftOfParens->Tok.getIdentifierInfo() && !LeftOfParens->isOneOf(Keywords.kw_in, tok::kw_return, tok::kw_case, - tok::kw_delete)) { + tok::kw_delete, tok::kw_throw)) { return false; } @@ -3312,6 +3312,10 @@ !Right.isOneOf(tok::semi, tok::r_paren, tok::hashhash)) { return true; } + if (Left.is(tok::kw_throw) && Right.is(tok::l_paren) && Right.MatchingParen && + Right.MatchingParen->is(TT_CastRParen)) { + return true; + } if (Style.isJson() && Left.is(tok::string_literal) && Right.is(tok::colon)) return false; if (Left.is(Keywords.kw_assert) && Style.Language == FormatStyle::LK_Java)
Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -10958,6 +10958,7 @@ verifyFormat("my_int a = (my_int)2.0f;"); verifyFormat("my_int a = (my_int)sizeof(int);"); verifyFormat("return (my_int)aaa;"); + verifyFormat("throw (my_int)aaa;"); verifyFormat("#define x ((int)-1)"); verifyFormat("#define LENGTH(x, y) (x) - (y) + 1"); verifyFormat("#define p(q) ((int *)&q)"); Index: clang/lib/Format/TokenAnnotator.cpp =================================================================== --- clang/lib/Format/TokenAnnotator.cpp +++ clang/lib/Format/TokenAnnotator.cpp @@ -2153,7 +2153,7 @@ // before the parentheses, this is unlikely to be a cast. if (LeftOfParens->Tok.getIdentifierInfo() && !LeftOfParens->isOneOf(Keywords.kw_in, tok::kw_return, tok::kw_case, - tok::kw_delete)) { + tok::kw_delete, tok::kw_throw)) { return false; } @@ -3312,6 +3312,10 @@ !Right.isOneOf(tok::semi, tok::r_paren, tok::hashhash)) { return true; } + if (Left.is(tok::kw_throw) && Right.is(tok::l_paren) && Right.MatchingParen && + Right.MatchingParen->is(TT_CastRParen)) { + return true; + } if (Style.isJson() && Left.is(tok::string_literal) && Right.is(tok::colon)) return false; if (Left.is(Keywords.kw_assert) && Style.Language == FormatStyle::LK_Java)
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits