[clang] e60defb - [clang-format] Add regression tests for function ref qualifiers on operator definition. NFC.
Marek Kurdej via cfe-commits
cfe-commits at lists.llvm.org
Tue Mar 15 05:00:20 PDT 2022
Author: Marek Kurdej
Date: 2022-03-15T12:58:08+01:00
New Revision: e60defb931cfc333d143f6000a6a65ae4dc106a2
URL: https://github.com/llvm/llvm-project/commit/e60defb931cfc333d143f6000a6a65ae4dc106a2
DIFF: https://github.com/llvm/llvm-project/commit/e60defb931cfc333d143f6000a6a65ae4dc106a2.diff
LOG: [clang-format] Add regression tests for function ref qualifiers on operator definition. NFC.
Fixes https://github.com/llvm/llvm-project/issues/54374.
Added:
Modified:
clang/unittests/Format/FormatTest.cpp
clang/unittests/Format/TokenAnnotatorTest.cpp
Removed:
################################################################################
diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp
index 354b60e27a5c7..557438de70fe0 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -9889,6 +9889,14 @@ TEST_F(FormatTest, UnderstandsFunctionRefQualification) {
verifyFormat("template <typename T>\n"
"void F(T) && = delete;",
getGoogleStyle());
+ verifyFormat("template <typename T> void operator=(T) &;");
+ verifyFormat("template <typename T> void operator=(T) const &;");
+ verifyFormat("template <typename T> void operator=(T) &noexcept;");
+ verifyFormat("template <typename T> void operator=(T) & = default;");
+ verifyFormat("template <typename T> void operator=(T) &&;");
+ verifyFormat("template <typename T> void operator=(T) && = delete;");
+ verifyFormat("template <typename T> void operator=(T) & {}");
+ verifyFormat("template <typename T> void operator=(T) && {}");
FormatStyle AlignLeft = getLLVMStyle();
AlignLeft.PointerAlignment = FormatStyle::PAS_Left;
@@ -9909,6 +9917,14 @@ TEST_F(FormatTest, UnderstandsFunctionRefQualification) {
verifyFormat("void Fn(T const volatile&&) const volatile&&;", AlignLeft);
verifyFormat("void Fn(T const volatile&&) const volatile&& noexcept;",
AlignLeft);
+ verifyFormat("template <typename T> void operator=(T) &;", AlignLeft);
+ verifyFormat("template <typename T> void operator=(T) const&;", AlignLeft);
+ verifyFormat("template <typename T> void operator=(T) & noexcept;", AlignLeft);
+ verifyFormat("template <typename T> void operator=(T) & = default;", AlignLeft);
+ verifyFormat("template <typename T> void operator=(T) &&;", AlignLeft);
+ verifyFormat("template <typename T> void operator=(T) && = delete;", AlignLeft);
+ verifyFormat("template <typename T> void operator=(T) & {}", AlignLeft);
+ verifyFormat("template <typename T> void operator=(T) && {}", AlignLeft);
FormatStyle AlignMiddle = getLLVMStyle();
AlignMiddle.PointerAlignment = FormatStyle::PAS_Middle;
@@ -9930,6 +9946,14 @@ TEST_F(FormatTest, UnderstandsFunctionRefQualification) {
verifyFormat("void Fn(T const volatile &&) const volatile &&;", AlignMiddle);
verifyFormat("void Fn(T const volatile &&) const volatile && noexcept;",
AlignMiddle);
+ verifyFormat("template <typename T> void operator=(T) &;", AlignMiddle);
+ verifyFormat("template <typename T> void operator=(T) const &;", AlignMiddle);
+ verifyFormat("template <typename T> void operator=(T) & noexcept;", AlignMiddle);
+ verifyFormat("template <typename T> void operator=(T) & = default;", AlignMiddle);
+ verifyFormat("template <typename T> void operator=(T) &&;", AlignMiddle);
+ verifyFormat("template <typename T> void operator=(T) && = delete;", AlignMiddle);
+ verifyFormat("template <typename T> void operator=(T) & {}", AlignMiddle);
+ verifyFormat("template <typename T> void operator=(T) && {}", AlignMiddle);
FormatStyle Spaces = getLLVMStyle();
Spaces.SpacesInCStyleCastParentheses = true;
diff --git a/clang/unittests/Format/TokenAnnotatorTest.cpp b/clang/unittests/Format/TokenAnnotatorTest.cpp
index 5f346fa5f8bfa..9240e812ba927 100644
--- a/clang/unittests/Format/TokenAnnotatorTest.cpp
+++ b/clang/unittests/Format/TokenAnnotatorTest.cpp
@@ -159,6 +159,24 @@ TEST_F(TokenAnnotatorTest, UnderstandsDelete) {
EXPECT_TOKEN(Tokens[7], tok::r_paren, TT_CastRParen);
}
+TEST_F(TokenAnnotatorTest, UnderstandsFunctionRefQualifiers) {
+ auto Tokens = annotate("void f() &;");
+ EXPECT_EQ(Tokens.size(), 7u) << Tokens;
+ EXPECT_TOKEN(Tokens[4], tok::amp, TT_PointerOrReference);
+
+ Tokens = annotate("void operator=() &&;");
+ EXPECT_EQ(Tokens.size(), 8u) << Tokens;
+ EXPECT_TOKEN(Tokens[5], tok::ampamp, TT_PointerOrReference);
+
+ Tokens = annotate("template <typename T> void f() &;");
+ EXPECT_EQ(Tokens.size(), 12u) << Tokens;
+ EXPECT_TOKEN(Tokens[9], tok::amp, TT_PointerOrReference);
+
+ Tokens = annotate("template <typename T> void operator=() &;");
+ EXPECT_EQ(Tokens.size(), 13u) << Tokens;
+ EXPECT_TOKEN(Tokens[10], tok::amp, TT_PointerOrReference);
+}
+
TEST_F(TokenAnnotatorTest, UnderstandsRequiresClausesAndConcepts) {
auto Tokens = annotate("template <typename T>\n"
"concept C = (Foo && Bar) && (Bar && Baz);");
More information about the cfe-commits
mailing list