diff --git a/clang-tools-extra/clang-doc/Serialize.cpp b/clang-tools-extra/clang-doc/Serialize.cpp index bcab4f1b8a729..457df5b781d13 100644 --- a/clang-tools-extra/clang-doc/Serialize.cpp +++ b/clang-tools-extra/clang-doc/Serialize.cpp @@ -778,7 +778,9 @@ static void populateSymbolInfo(SymbolInfo &I, const T *D, const FullComment *C, Mangler->mangleCXXVTable(CXXD, MangledStream); else MangledStream << D->getNameAsString(); - if (MangledName.size() > 255) + // A 250 length limit was chosen since 255 is a common limit across + // different filesystems, with a 5 character buffer for file extensions. + 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