[clang] 072e81d - Revert "[Clang][Comments] Attach comments to decl even if preproc directives are in between (#88367)"
Aaron Ballman via cfe-commits
cfe-commits at lists.llvm.org
Tue Jul 2 11:46:13 PDT 2024
Author: Aaron Ballman
Date: 2024-07-02T14:45:52-04:00
New Revision: 072e81db7a974bfb27b9b65d73330de7dd739821
URL: https://github.com/llvm/llvm-project/commit/072e81db7a974bfb27b9b65d73330de7dd739821
DIFF: https://github.com/llvm/llvm-project/commit/072e81db7a974bfb27b9b65d73330de7dd739821.diff
LOG: Revert "[Clang][Comments] Attach comments to decl even if preproc directives are in between (#88367)"
This reverts commit 9f04d75b2bd8ba83863db74ebe1a5c08cfc5815c.
There was post-commit feedback on the direction this PR took.
Added:
Modified:
clang/docs/ReleaseNotes.rst
clang/lib/AST/ASTContext.cpp
clang/lib/Headers/amxcomplexintrin.h
clang/lib/Headers/ia32intrin.h
clang/test/Index/annotate-comments.cpp
clang/unittests/AST/DeclTest.cpp
Removed:
################################################################################
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 181d10008bc8c..1537eaaba0c66 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -147,22 +147,6 @@ Clang Frontend Potentially Breaking Changes
- The ``hasTypeLoc`` AST matcher will no longer match a ``classTemplateSpecializationDecl``;
existing uses should switch to ``templateArgumentLoc`` or ``hasAnyTemplateArgumentLoc`` instead.
-- The comment parser now matches comments to declarations even if there is a
- preprocessor macro in between the comment and declaration. This change is
- intended to improve Clang's support for parsing documentation comments and
- to better conform to Doxygen's behavior.
-
- This has the potential to cause ``-Wdocumentation`` warnings, especially in
- cases where a function-like macro has a documentation comment and is followed
- immediately by a normal function. The function-like macro's documentation
- comments will be attributed to the subsequent function and may cause
- ``-Wdocumentation`` warnings such as mismatched parameter names, or invalid
- return documentation comments.
-
- In cases where the ``-Wdocumentation`` warnings are thrown, the suggested fix
- is to document the declaration following the macro so that the warnings are
- fixed.
-
Clang Python Bindings Potentially Breaking Changes
--------------------------------------------------
- Renamed ``CursorKind`` variant 272 from ``OMP_TEAMS_DISTRIBUTE_DIRECTIVE``
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp
index 17ca5ad52d78e..84deaf5429df7 100644
--- a/clang/lib/AST/ASTContext.cpp
+++ b/clang/lib/AST/ASTContext.cpp
@@ -284,10 +284,9 @@ RawComment *ASTContext::getRawCommentForDeclNoCacheImpl(
StringRef Text(Buffer + CommentEndOffset,
DeclLocDecomp.second - CommentEndOffset);
- // There should be no other declarations between comment and declaration.
- // Preprocessor directives are implicitly allowed to be between a comment and
- // its associated decl.
- if (Text.find_last_of(";{}@") != StringRef::npos)
+ // There should be no other declarations or preprocessor directives between
+ // comment and declaration.
+ if (Text.find_last_of(";{}#@") != StringRef::npos)
return nullptr;
return CommentBeforeDecl;
diff --git a/clang/lib/Headers/amxcomplexintrin.h b/clang/lib/Headers/amxcomplexintrin.h
index 6ae40d2eab5c8..84ef972fcadf0 100644
--- a/clang/lib/Headers/amxcomplexintrin.h
+++ b/clang/lib/Headers/amxcomplexintrin.h
@@ -107,24 +107,6 @@
/// The 2nd source tile. Max size is 1024 Bytes.
#define _tile_cmmrlfp16ps(dst, a, b) __builtin_ia32_tcmmrlfp16ps(dst, a, b)
-/// Perform matrix multiplication of two tiles containing complex elements and
-/// accumulate the results into a packed single precision tile.
-///
-/// \param m
-/// The number of rows in the first tile and the number of rows in the result
-/// tile.
-/// \param n
-/// The number of columns in the second tile and the number of columns in the
-/// result tile.
-/// \param k
-/// The number of columns in the first tile and the number of rows in the
-/// second tile.
-/// \param dst
-/// Pointer to the destination tile where the result will be stored.
-/// \param src1
-/// Pointer to the first source tile.
-/// \param src2
-/// Pointer to the second source tile.
static __inline__ _tile1024i __DEFAULT_FN_ATTRS_COMPLEX
_tile_cmmimfp16ps_internal(unsigned short m, unsigned short n, unsigned short k,
_tile1024i dst, _tile1024i src1, _tile1024i src2) {
diff --git a/clang/lib/Headers/ia32intrin.h b/clang/lib/Headers/ia32intrin.h
index 1cdc53584a1f5..8e65f232a0def 100644
--- a/clang/lib/Headers/ia32intrin.h
+++ b/clang/lib/Headers/ia32intrin.h
@@ -533,13 +533,6 @@ __rdtscp(unsigned int *__A) {
/// \see __rdpmc
#define _rdpmc(A) __rdpmc(A)
-/// Invalidates the contents of the processor's internal caches.
-/// This function writes back and invalidates all modified cache lines in
-/// the processor.
-///
-/// \headerfile <x86intrin.h>
-///
-/// This intrinsic corresponds to the \c WBINVD instruction.
static __inline__ void __DEFAULT_FN_ATTRS
_wbinvd(void) {
__builtin_ia32_wbinvd();
diff --git a/clang/test/Index/annotate-comments.cpp b/clang/test/Index/annotate-comments.cpp
index bff25d46cf80e..6f9f8f0bbbc9e 100644
--- a/clang/test/Index/annotate-comments.cpp
+++ b/clang/test/Index/annotate-comments.cpp
@@ -204,9 +204,9 @@ void isdoxy45(void);
/// Ggg. IS_DOXYGEN_END
void isdoxy46(void);
-/// isdoxy47 IS_DOXYGEN_SINGLE
+/// IS_DOXYGEN_NOT_ATTACHED
#define FOO
-void isdoxy47(void);
+void notdoxy47(void);
/// IS_DOXYGEN_START Aaa bbb
/// \param ccc
@@ -330,7 +330,6 @@ void isdoxy54(int);
// CHECK: annotate-comments.cpp:185:6: FunctionDecl=isdoxy44:{{.*}} BriefComment=[IS_DOXYGEN_START Aaa bbb ccc.]
// CHECK: annotate-comments.cpp:195:6: FunctionDecl=isdoxy45:{{.*}} BriefComment=[Ddd eee. Fff.]
// CHECK: annotate-comments.cpp:205:6: FunctionDecl=isdoxy46:{{.*}} BriefComment=[Ddd eee. Fff.]
-// CHECK: annotate-comments.cpp:209:6: FunctionDecl=isdoxy47:{{.*}} isdoxy47 IS_DOXYGEN_SINGLE
// CHECK: annotate-comments.cpp:214:6: FunctionDecl=isdoxy48:{{.*}} BriefComment=[IS_DOXYGEN_START Aaa bbb]
// CHECK: annotate-comments.cpp:218:6: FunctionDecl=isdoxy49:{{.*}} BriefComment=[IS_DOXYGEN_START Aaa]
// CHECK: annotate-comments.cpp:222:6: FunctionDecl=isdoxy50:{{.*}} BriefComment=[Returns ddd IS_DOXYGEN_END]
diff --git a/clang/unittests/AST/DeclTest.cpp b/clang/unittests/AST/DeclTest.cpp
index 8dca011ba8779..16aa2b50b7a06 100644
--- a/clang/unittests/AST/DeclTest.cpp
+++ b/clang/unittests/AST/DeclTest.cpp
@@ -576,313 +576,3 @@ void instantiate_template() {
EXPECT_EQ(GetNameInfoRange(Matches[1]), "<input.cc:6:14, col:15>");
EXPECT_EQ(GetNameInfoRange(Matches[2]), "<input.cc:6:14, col:15>");
}
-
-TEST(Decl, CommentsAttachedToDecl1) {
- const SmallVector<StringRef> Sources{
- R"(
- /// Test comment
- void f();
- )",
-
- R"(
- /// Test comment
-
- void f();
- )",
-
- R"(
- /// Test comment
- #if 0
- // tralala
- #endif
- void f();
- )",
-
- R"(
- /// Test comment
-
- #if 0
- // tralala
- #endif
-
- void f();
- )",
-
- R"(
- /// Test comment
- #ifdef DOCS
- template<typename T>
- #endif
- void f();
- )",
-
- R"(
- /// Test comment
-
- #ifdef DOCS
- template<typename T>
- #endif
-
- void f();
- )",
- };
-
- for (const auto code : Sources) {
- auto AST = tooling::buildASTFromCodeWithArgs(code, /*Args=*/{"-std=c++20"});
- ASTContext &Ctx = AST->getASTContext();
-
- auto const *F = selectFirst<FunctionDecl>(
- "id", match(functionDecl(hasName("f")).bind("id"), Ctx));
- ASSERT_NE(F, nullptr);
-
- auto const *C = Ctx.getRawCommentForDeclNoCache(F);
- ASSERT_NE(C, nullptr);
- EXPECT_EQ(C->getRawText(Ctx.getSourceManager()), "/// Test comment");
- }
-}
-
-TEST(Decl, CommentsAttachedToDecl2) {
- const SmallVector<StringRef> Sources{
- R"(
- /** Test comment
- */
- void f();
- )",
-
- R"(
- /** Test comment
- */
-
- void f();
- )",
-
- R"(
- /** Test comment
- */
- #if 0
- /* tralala */
- #endif
- void f();
- )",
-
- R"(
- /** Test comment
- */
-
- #if 0
- /* tralala */
- #endif
-
- void f();
- )",
-
- R"(
- /** Test comment
- */
- #ifdef DOCS
- template<typename T>
- #endif
- void f();
- )",
-
- R"(
- /** Test comment
- */
-
- #ifdef DOCS
- template<typename T>
- #endif
-
- void f();
- )",
- };
-
- for (const auto code : Sources) {
- auto AST = tooling::buildASTFromCodeWithArgs(code, /*Args=*/{"-std=c++20"});
- ASTContext &Ctx = AST->getASTContext();
-
- auto const *F = selectFirst<FunctionDecl>(
- "id", match(functionDecl(hasName("f")).bind("id"), Ctx));
- ASSERT_NE(F, nullptr);
-
- auto const *C = Ctx.getRawCommentForDeclNoCache(F);
- ASSERT_NE(C, nullptr);
- EXPECT_EQ(C->getRawText(Ctx.getSourceManager()),
- "/** Test comment\n */");
- }
-}
-
-TEST(Decl, CommentsAttachedToDecl3) {
- const SmallVector<StringRef> Sources{
- R"(
- /// @brief Test comment
- void f();
- )",
-
- R"(
- /// @brief Test comment
-
- void f();
- )",
-
- R"(
- /// @brief Test comment
- #if 0
- // tralala
- #endif
- void f();
- )",
-
- R"(
- /// @brief Test comment
-
- #if 0
- // tralala
- #endif
-
- void f();
- )",
-
- R"(
- /// @brief Test comment
- #ifdef DOCS
- template<typename T>
- #endif
- void f();
- )",
-
- R"(
- /// @brief Test comment
-
- #ifdef DOCS
- template<typename T>
- #endif
-
- void f();
- )",
- };
-
- for (const auto code : Sources) {
- auto AST = tooling::buildASTFromCodeWithArgs(code, /*Args=*/{"-std=c++20"});
- ASTContext &Ctx = AST->getASTContext();
-
- auto const *F = selectFirst<FunctionDecl>(
- "id", match(functionDecl(hasName("f")).bind("id"), Ctx));
- ASSERT_NE(F, nullptr);
-
- auto const *C = Ctx.getRawCommentForDeclNoCache(F);
- ASSERT_NE(C, nullptr);
- EXPECT_EQ(C->getRawText(Ctx.getSourceManager()), "/// @brief Test comment");
- }
-}
-
-TEST(Decl, CommentsAttachedToDecl4) {
- const SmallVector<StringRef> Sources{
- R"(
- /** \brief Test comment
- */
- void f();
- )",
-
- R"(
- /** \brief Test comment
- */
-
- void f();
- )",
-
- R"(
- /** \brief Test comment
- */
- #if 0
- /* tralala */
- #endif
- void f();
- )",
-
- R"(
- /** \brief Test comment
- */
-
- #if 0
- /* tralala */
- #endif
-
- void f();
- )",
-
- R"(
- /** \brief Test comment
- */
- #ifdef DOCS
- template<typename T>
- #endif
- void f();
- )",
-
- R"(
- /** \brief Test comment
- */
-
- #ifdef DOCS
- template<typename T>
- #endif
-
- void f();
- )",
- };
-
- for (const auto code : Sources) {
- auto AST = tooling::buildASTFromCodeWithArgs(code, /*Args=*/{"-std=c++20"});
- ASTContext &Ctx = AST->getASTContext();
-
- auto const *F = selectFirst<FunctionDecl>(
- "id", match(functionDecl(hasName("f")).bind("id"), Ctx));
- ASSERT_NE(F, nullptr);
-
- auto const *C = Ctx.getRawCommentForDeclNoCache(F);
- ASSERT_NE(C, nullptr);
- EXPECT_EQ(C->getRawText(Ctx.getSourceManager()),
- "/** \\brief Test comment\n */");
- }
-}
-
-/// This example intentionally inserts characters between a doc comment and the
-/// associated declaration to verify that the comment does not become associated
-/// with the FunctionDecl.
-/// By default, Clang does not allow for other declarations (aside from
-/// preprocessor directives, as shown above) to be placed between a doc comment
-/// and a declaration.
-TEST(Decl, CommentsAttachedToDecl5) {
- const SmallVector<StringRef> Sources{
- R"(
- /// Test comment
- ;
- void f();
- )",
-
- R"(
- /// Test comment
- // @
- void f();
- )",
-
- R"(
- /// Test comment
- // {}
- void f();
- )",
- };
-
- for (const auto code : Sources) {
- auto AST = tooling::buildASTFromCodeWithArgs(code, /*Args=*/{"-std=c++20"});
- ASTContext &Ctx = AST->getASTContext();
-
- auto const *F = selectFirst<FunctionDecl>(
- "id", match(functionDecl(hasName("f")).bind("id"), Ctx));
- ASSERT_NE(F, nullptr);
-
- auto const *C = Ctx.getRawCommentForDeclNoCache(F);
- ASSERT_EQ(C, nullptr);
- }
-}
More information about the cfe-commits
mailing list