Author: Mainak Sil Date: 2024-09-13T00:35:24-04:00 New Revision: d04c2ed60c6a1acef75b0cfff6f1bf9a5a7bea89
URL: https://github.com/llvm/llvm-project/commit/d04c2ed60c6a1acef75b0cfff6f1bf9a5a7bea89 DIFF: https://github.com/llvm/llvm-project/commit/d04c2ed60c6a1acef75b0cfff6f1bf9a5a7bea89.diff LOG: [clang-tidy] Improve documentation of bugprone-pointer-arithmetic-on-polymorphic-object (#108324) Fix #107831. Added: Modified: clang-tools-extra/docs/clang-tidy/checks/bugprone/pointer-arithmetic-on-polymorphic-object.rst Removed: ################################################################################ diff --git a/clang-tools-extra/docs/clang-tidy/checks/bugprone/pointer-arithmetic-on-polymorphic-object.rst b/clang-tools-extra/docs/clang-tidy/checks/bugprone/pointer-arithmetic-on-polymorphic-object.rst index 1884acd5f12b3e..95509ef3c724de 100644 --- a/clang-tools-extra/docs/clang-tidy/checks/bugprone/pointer-arithmetic-on-polymorphic-object.rst +++ b/clang-tools-extra/docs/clang-tidy/checks/bugprone/pointer-arithmetic-on-polymorphic-object.rst @@ -19,20 +19,28 @@ Example: .. code-block:: c++ struct Base { - virtual void ~Base(); + virtual ~Base(); + int i; }; struct Derived : public Base {}; - void foo() { - Base *b = new Derived[10]; - + void foo(Base* b) { b += 1; // warning: pointer arithmetic on class that declares a virtual function can // result in undefined behavior if the dynamic type diff ers from the // pointer type + } + + int bar(const Derived d[]) { + return d[1].i; // warning due to pointer arithmetic on polymorphic object + } - delete[] static_cast<Derived*>(b); + // Making Derived final suppresses the warning + struct FinalDerived final : public Base {}; + + int baz(const FinalDerived d[]) { + return d[1].i; // no warning as FinalDerived is final } Options @@ -47,17 +55,9 @@ Options .. code-block:: c++ - void bar() { - Base *b = new Base[10]; + void bar(Base b[], Derived d[]) { b += 1; // warning, as Base declares a virtual destructor - - delete[] b; - - Derived *d = new Derived[10]; // Derived overrides the destructor, and - // declares no other virtual functions d += 1; // warning only if IgnoreVirtualDeclarationsOnly is set to false - - delete[] d; } References _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits