summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/test/clang-tidy/fuchsia-virtual-inheritance.cpp
diff options
context:
space:
mode:
authorJulie Hockett <juliehockett@google.com>2017-12-15 18:54:28 +0000
committerJulie Hockett <juliehockett@google.com>2017-12-15 18:54:28 +0000
commit63b57db3969109c9f32a7835fdf4da73f8954272 (patch)
tree265261781075a624c5c35175891c504edb100aa5 /clang-tools-extra/test/clang-tidy/fuchsia-virtual-inheritance.cpp
parent76657f81ba23fe63a0b72d9193571aeb75df29b4 (diff)
downloadbcm5719-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.cpp42
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;
+}
OpenPOWER on IntegriCloud