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);"); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits