Author: Chuanqi Xu Date: 2020-12-15T20:50:46+08:00 New Revision: 8b48d24373204fc2fe6aac1f1f850fa3b6c18445
URL: https://github.com/llvm/llvm-project/commit/8b48d24373204fc2fe6aac1f1f850fa3b6c18445 DIFF: https://github.com/llvm/llvm-project/commit/8b48d24373204fc2fe6aac1f1f850fa3b6c18445.diff LOG: [clang-format] Recognize c++ coroutine keywords as unary operator to avoid misleading pointer alignment Summary: The clang-format may go wrong when handle c++ coroutine keywords and pointer. The default value for PointerAlignment is PAS_Right. So the following format is good: ``` co_return *a; ``` But within some code style, the value for PointerAlignment is PAS_Left, the behavior goes wrong: ``` co_return* a; ``` test-plan: check-clang reviewers: MyDeveloperDay Differential Revision: https://reviews.llvm.org/D91245 Added: Modified: clang/lib/Format/TokenAnnotator.cpp clang/unittests/Format/FormatTest.cpp Removed: ################################################################################ diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index b1c9c37a8ed9..821b46b75f6b 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -1964,6 +1964,7 @@ class AnnotatingParser { if (PrevToken->isOneOf(tok::l_paren, tok::l_square, tok::l_brace, tok::comma, tok::semi, tok::kw_return, tok::colon, + tok::kw_co_return, tok::kw_co_await, tok::kw_co_yield, tok::equal, tok::kw_delete, tok::kw_sizeof, tok::kw_throw) || PrevToken->isOneOf(TT_BinaryOperator, TT_ConditionalExpr, diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 1c78b6e2cb1e..a3dbec9a669f 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -7755,6 +7755,15 @@ TEST_F(FormatTest, UnderstandsUnaryOperators) { verifyFormat("co_yield -1;"); verifyFormat("co_return -1;"); + + // Check that * is not treated as a binary operator when we set PointerAlignment + // as PAS_Left after a keyword and not a declaration. + FormatStyle PASLeftStyle = getLLVMStyle(); + PASLeftStyle.PointerAlignment = FormatStyle::PAS_Left; + verifyFormat("co_return *a;", PASLeftStyle); + verifyFormat("co_await *a;", PASLeftStyle); + verifyFormat("co_yield *a", PASLeftStyle); + verifyFormat("return *a;", PASLeftStyle); } TEST_F(FormatTest, DoesNotIndentRelativeToUnaryOperators) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits