brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.0 KiB · 4049eb0 Raw
35 lines · cpp
1// RUN: %clang_cc1 -load %llvmshlibdir/CallSuperAttr%pluginext -fsyntax-only -verify=callsuper %s2// RUN: %clang_cc1 -load %llvmshlibdir/CallSuperAttr%pluginext -DBAD_CALLSUPER -fsyntax-only -verify=badcallsuper %s3// REQUIRES: plugins, examples4 5// callsuper-no-diagnostics6struct Base1 {7  [[clang::call_super]] virtual void Test() {}8};9struct Base2 {10  [[clang::call_super]] virtual void Test() {}11};12struct Derive : public Base1, public Base2 {13#ifndef BAD_CALLSUPER14  void Test() override;15#else16  [[clang::call_super]] virtual void Test() override final;17  // badcallsuper-warning@16 {{'call_super' attribute marked on a final method}}18#endif19};20void Derive::Test() {21  Base1::Test();22#ifndef BAD_CALLSUPER23  Base2::Test();24#else25  // badcallsuper-warning@20 {{virtual function 'Base2::Test' is marked as 'call_super' but this overriding method does not call the base version}}26  // badcallsuper-note@10 {{function marked 'call_super' here}}27#endif28}29struct Derive2 : public Base1, public Base2 {30  void Test() override {31    Base1::Test();32    Base2::Test();33  }34};35