summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/test/clang-tidy/cppcoreguidelines-slicing.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/test/clang-tidy/cppcoreguidelines-slicing.cpp')
-rw-r--r--clang-tools-extra/test/clang-tidy/cppcoreguidelines-slicing.cpp100
1 files changed, 0 insertions, 100 deletions
diff --git a/clang-tools-extra/test/clang-tidy/cppcoreguidelines-slicing.cpp b/clang-tools-extra/test/clang-tidy/cppcoreguidelines-slicing.cpp
deleted file mode 100644
index 4fc22f9dc24..00000000000
--- a/clang-tools-extra/test/clang-tidy/cppcoreguidelines-slicing.cpp
+++ /dev/null
@@ -1,100 +0,0 @@
-// RUN: %check_clang_tidy %s cppcoreguidelines-slicing %t
-
-class Base {
- int i;
- void f() {}
- virtual void g() {}
-};
-
-class DerivedWithMemberVariables : public Base {
- void f();
- int j;
-};
-
-class TwiceDerivedWithNoMemberVariables : public DerivedWithMemberVariables {
- void f();
-};
-
-class DerivedWithOverride : public Base {
- void f();
- void g() override {}
-};
-
-class TwiceDerivedWithNoOverride : public DerivedWithOverride {
- void f();
-};
-
-void TakesBaseByValue(Base base);
-
-DerivedWithMemberVariables ReturnsDerived();
-
-void positivesWithMemberVariables() {
- DerivedWithMemberVariables b;
- Base a{b};
- // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: slicing object from type 'DerivedWithMemberVariables' to 'Base' discards {{[0-9]*}}*sizeof(char) bytes of state [cppcoreguidelines-slicing]
- a = b;
- // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: slicing object from type 'DerivedWithMemberVariables' to 'Base' discards {{[0-9]*}}*sizeof(char) bytes of state
- TakesBaseByValue(b);
- // CHECK-MESSAGES: :[[@LINE-1]]:20: warning: slicing object from type 'DerivedWithMemberVariables' to 'Base' discards {{[0-9]*}}*sizeof(char) bytes of state
-
- TwiceDerivedWithNoMemberVariables c;
- a = c;
- // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: slicing object from type 'TwiceDerivedWithNoMemberVariables' to 'Base' discards {{[0-9]*}}*sizeof(char) bytes of state
-
- a = ReturnsDerived();
- // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: slicing object from type 'DerivedWithMemberVariables' to 'Base' discards 4*sizeof(char) bytes of state
-}
-
-void positivesWithOverride() {
- DerivedWithOverride b;
- Base a{b};
- // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: slicing object from type 'DerivedWithOverride' to 'Base' discards override 'g'
- a = b;
- // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: slicing object from type 'DerivedWithOverride' to 'Base' discards override 'g'
- TakesBaseByValue(b);
- // CHECK-MESSAGES: :[[@LINE-1]]:20: warning: slicing object from type 'DerivedWithOverride' to 'Base' discards override 'g'
-
- TwiceDerivedWithNoOverride c;
- a = c;
- // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: slicing object from type 'DerivedWithOverride' to 'Base' discards override 'g'
-}
-
-void TakesBaseByReference(Base &base);
-
-class DerivedThatAddsVirtualH : public Base {
- virtual void h();
-};
-
-class DerivedThatOverridesH : public DerivedThatAddsVirtualH {
- void h() override;
-};
-
-void negatives() {
- // OK, simple copying from the same type.
- Base a;
- TakesBaseByValue(a);
- DerivedWithMemberVariables b;
- DerivedWithMemberVariables c{b};
- b = c;
-
- // OK, derived type does not have extra state.
- TwiceDerivedWithNoMemberVariables d;
- DerivedWithMemberVariables e{d};
- e = d;
-
- // OK, derived does not override any method.
- TwiceDerivedWithNoOverride f;
- DerivedWithOverride g{f};
- g = f;
-
- // OK, no copying.
- TakesBaseByReference(d);
- TakesBaseByReference(f);
-
- // Derived type overrides methods, but these methods are not in the base type,
- // so cannot be called accidentally. Right now this triggers, but we might
- // want to allow it.
- DerivedThatOverridesH h;
- a = h;
- // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: slicing object from type 'DerivedThatOverridesH' to 'Base' discards override 'h'
-}
OpenPOWER on IntegriCloud