summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-slicing.rst
diff options
context:
space:
mode:
authorClement Courbet <courbet@google.com>2016-07-22 12:42:19 +0000
committerClement Courbet <courbet@google.com>2016-07-22 12:42:19 +0000
commitf67fbfaa8c627bfbc628adecd4eed80fd85100b4 (patch)
tree391ced0e52aa55a963cb8753d8defe44d642fdda /clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-slicing.rst
parenta81f4728f370541c8fd51bbad29771fa3c152069 (diff)
downloadbcm5719-llvm-f67fbfaa8c627bfbc628adecd4eed80fd85100b4.tar.gz
bcm5719-llvm-f67fbfaa8c627bfbc628adecd4eed80fd85100b4.zip
[clang-tidy] new cppcoreguidelines-slicing
Flags slicing of member variables or vtable. See: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#es63-dont-slice https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c145-access-polymorphic-objects-through-pointers-and-references Differential revision: http://reviews.llvm.org/D21974 llvm-svn: 276408
Diffstat (limited to 'clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-slicing.rst')
-rw-r--r--clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-slicing.rst23
1 files changed, 23 insertions, 0 deletions
diff --git a/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-slicing.rst b/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-slicing.rst
new file mode 100644
index 00000000000..0b1bb6beed4
--- /dev/null
+++ b/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-slicing.rst
@@ -0,0 +1,23 @@
+.. title:: clang-tidy - cppcoreguidelines-slicing
+
+cppcoreguidelines-slicing
+=========================
+
+Flags slicing of member variables or vtable. Slicing happens when copying a
+derived object into a base object: the members of the derived object (both
+member variables and virtual member functions) will be discarded.
+This can be misleading especially for member function slicing, for example:
+
+.. code:: c++
+
+ struct B { int a; virtual int f(); };
+ struct D : B { int b; int f() override; };
+ void use(B b) { // Missing reference, intended ?
+ b.f(); // Calls B::f.
+ }
+ D d;
+ use(d); // Slice.
+
+See the relevant CppCoreGuidelines sections for details:
+https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#es63-dont-slice
+https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c145-access-polymorphic-objects-through-pointers-and-references
OpenPOWER on IntegriCloud