https://github.com/evelez7 created https://github.com/llvm/llvm-project/pull/155511
The previous limit did not take into account filename extensions. Since the extensions we use (.yaml, .json, .html, .md) are at most 5 characters, we can lower the limit by 5. Also add some tests to make sure the rules are observed and don't explicitly crash clang-doc. >From 509159b26f8480cc6e85a3b9d836f434a9a31505 Mon Sep 17 00:00:00 2001 From: Erick Velez <erickvel...@gmail.com> Date: Tue, 26 Aug 2025 15:30:33 -0700 Subject: [PATCH] [clang-doc] lower filename length limit by 5 The previous limit did not take into account filename extensions. Since the extensions we use (.yaml, .json, .html, .md) are at most 5 characters, we can lower the limit by 5. Also add some tests to make sure the rules are observed and don't explicitly crash clang-doc. --- clang-tools-extra/clang-doc/Serialize.cpp | 2 +- clang-tools-extra/test/clang-doc/long-name.cpp | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 clang-tools-extra/test/clang-doc/long-name.cpp diff --git a/clang-tools-extra/clang-doc/Serialize.cpp b/clang-tools-extra/clang-doc/Serialize.cpp index bcab4f1b8a729..fdcf3b29fb754 100644 --- a/clang-tools-extra/clang-doc/Serialize.cpp +++ b/clang-tools-extra/clang-doc/Serialize.cpp @@ -778,7 +778,7 @@ static void populateSymbolInfo(SymbolInfo &I, const T *D, const FullComment *C, Mangler->mangleCXXVTable(CXXD, MangledStream); else MangledStream << D->getNameAsString(); - if (MangledName.size() > 255) + if (MangledName.size() > 250) // File creation fails if the mangled name is too long, so default to the // USR. We should look for a better check since filesystems differ in // maximum filename length diff --git a/clang-tools-extra/test/clang-doc/long-name.cpp b/clang-tools-extra/test/clang-doc/long-name.cpp new file mode 100644 index 0000000000000..b33337588da19 --- /dev/null +++ b/clang-tools-extra/test/clang-doc/long-name.cpp @@ -0,0 +1,14 @@ +// RUN: rm -rf %t && mkdir -p %t +// RUN: clang-doc --output=%t --format=mustache --executor=standalone %s +// RUN: ls %t/json | FileCheck %s -check-prefix=CHECK-JSON +// RUN: ls %t/html | FileCheck %s -check-prefix=CHECK-HTML + +struct ThisStructHasANameThatResultsInAMangledNameThatIsExactly250CharactersLongThatIsSupposedToTestTheFilenameLengthLimitsWithinClangDocInOrdertoSeeifclangdocwillcrashornotdependingonthelengthofthestructIfTheLengthIsTooLongThenClangDocWillCrashAnd12 {}; + +// This name is 1 character over the limit, so it will be serialized as a USR. +struct ThisStructHasANameThatResultsInAMangledNameThatIsExactly251CharactersLongThatIsSupposedToTestTheFilenameLengthLimitsWithinClangDocInOrdertoSeeifclangdocwillcrashornotdependingonthelengthofthestructIfTheLengthIsTooLongThenClangDocWillCrashAnd123 {}; + +// CHECK-JSON: ThisStructHasANameThatResultsInAMangledNameThatIsExactly250CharactersLongThatIsSupposedToTestTheFilenameLengthLimitsWithinClangDocInOrdertoSeeifclangdocwillcrashornotdependingonthelengthofthestructIfTheLengthIsTooLongThenClangDocWillCrashAnd12.json +// CHECK-JSON: {{[0-9A-F]*}}.json +// CHECK-HTML: ThisStructHasANameThatResultsInAMangledNameThatIsExactly250CharactersLongThatIsSupposedToTestTheFilenameLengthLimitsWithinClangDocInOrdertoSeeifclangdocwillcrashornotdependingonthelengthofthestructIfTheLengthIsTooLongThenClangDocWillCrashAnd12.html +// CHECK-HTML: {{[0-9A-F]*}}.html _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits