Author: Congcong Cai Date: 2025-11-05T11:25:53Z New Revision: e8564830c19e6fd5bfa38488c06f332b214ea858
URL: https://github.com/llvm/llvm-project/commit/e8564830c19e6fd5bfa38488c06f332b214ea858 DIFF: https://github.com/llvm/llvm-project/commit/e8564830c19e6fd5bfa38488c06f332b214ea858.diff LOG: [clang-tidy][doc] add more information in twine-local's document (#166266) explain more about use-after-free in llvm-twine-local add note about manually adjusting code after applying fix-it. fixed: #154810 Added: Modified: clang-tools-extra/docs/clang-tidy/checks/llvm/twine-local.rst Removed: ################################################################################ diff --git a/clang-tools-extra/docs/clang-tidy/checks/llvm/twine-local.rst b/clang-tools-extra/docs/clang-tidy/checks/llvm/twine-local.rst index ec9ef1c60913c..6c994a48d83de 100644 --- a/clang-tools-extra/docs/clang-tidy/checks/llvm/twine-local.rst +++ b/clang-tools-extra/docs/clang-tidy/checks/llvm/twine-local.rst @@ -14,3 +14,21 @@ should be generally avoided. // becomes static std::string Moo = (Twine("bark") + "bah").str(); + +The ``Twine`` does not own the memory of its contents, so it is not +recommended to use ``Twine`` created from temporary strings or string literals. + +.. code-block:: c++ + + static Twine getModuleIdentifier(StringRef moduleName) { + return moduleName + "_module"; + } + void foo() { + Twine result = getModuleIdentifier(std::string{"abc"} + "def"); + // temporary std::string is destroyed here, result is dangling + } + +After applying this fix-it hints, the code will use ``std::string`` instead of +``Twine`` for local variables. However, ``Twine`` has lots of methods that +are incompatible with ``std::string``, so the user may need to adjust the code +manually after applying the fix-it hints. _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
