diff options
author | Julie Hockett <juliehockett@google.com> | 2017-12-15 18:54:28 +0000 |
---|---|---|
committer | Julie Hockett <juliehockett@google.com> | 2017-12-15 18:54:28 +0000 |
commit | 63b57db3969109c9f32a7835fdf4da73f8954272 (patch) | |
tree | 265261781075a624c5c35175891c504edb100aa5 /clang-tools-extra/test/clang-tidy/fuchsia-virtual-inheritance.cpp | |
parent | 76657f81ba23fe63a0b72d9193571aeb75df29b4 (diff) | |
download | bcm5719-llvm-63b57db3969109c9f32a7835fdf4da73f8954272.tar.gz bcm5719-llvm-63b57db3969109c9f32a7835fdf4da73f8954272.zip |
[clang-tidy] Adding Fuchsia checker for virtual inheritance
Adds a check to the Fuchsia module to warn if classes are defined
with virtual inheritance.
See https://fuchsia.googlesource.com/zircon/+/master/docs/cxx.md for
reference.
Differential Revision: https://reviews.llvm.org/D40813
llvm-svn: 320841
Diffstat (limited to 'clang-tools-extra/test/clang-tidy/fuchsia-virtual-inheritance.cpp')
-rw-r--r-- | clang-tools-extra/test/clang-tidy/fuchsia-virtual-inheritance.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/clang-tools-extra/test/clang-tidy/fuchsia-virtual-inheritance.cpp b/clang-tools-extra/test/clang-tidy/fuchsia-virtual-inheritance.cpp new file mode 100644 index 00000000000..0c3311afcbd --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/fuchsia-virtual-inheritance.cpp @@ -0,0 +1,42 @@ +// RUN: %check_clang_tidy %s fuchsia-virtual-inheritance %t + +class A { +public: + A(int value) : val(value) {} + + int do_A() { return val; } + +private: + int val; +}; + +class B : public virtual A { + // CHECK-MESSAGES: [[@LINE-1]]:1: warning: direct virtual inheritance is disallowed [fuchsia-virtual-inheritance] + // CHECK-NEXT: class B : public virtual A { +public: + B() : A(0) {} + int do_B() { return 1 + do_A(); } +}; + +class C : public virtual A { + // CHECK-MESSAGES: [[@LINE-1]]:1: warning: direct virtual inheritance is disallowed [fuchsia-virtual-inheritance] + // CHECK-NEXT: class C : public virtual A { +public: + C() : A(0) {} + int do_C() { return 2 + do_A(); } +}; + +class D : public B, public C { +public: + D(int value) : A(value), B(), C() {} + + int do_D() { return do_A() + do_B() + do_C(); } +}; + +int main() { + A *a = new A(0); + B *b = new B(); + C *c = new C(); + D *d = new D(0); + return 0; +} |