[llvm-branch-commits] [clang] 8b48d24 - [clang-format] Recognize c++ coroutine keywords as unary operator to avoid misleading pointer alignment
Chuanqi Xu via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Tue Dec 15 04:57:07 PST 2020
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) {
More information about the llvm-branch-commits
mailing list