brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · d5bd10c Raw
61 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -verify %s2// RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s3// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s4 5struct A {6  virtual ~A();7#if __cplusplus >= 201103L8// expected-note@-2 2 {{overridden virtual function is here}}9#endif10};11 12struct B : A {13#if __cplusplus <= 199711L14// expected-error@-2 {{no suitable member 'operator delete' in 'B'}}15#else16// expected-error@-4 {{deleted function '~B' cannot override a non-deleted function}}17// expected-note@-5  {{virtual destructor requires an unambiguous, accessible 'operator delete'}}18#endif19  B() { }20#if __cplusplus <= 199711L21// expected-note@-2 {{implicit destructor for 'B' first required here}}22#endif23 24  void operator delete(void *, int);25#if __cplusplus <= 199711L26// expected-note@-2 {{'operator delete' declared here}}27#endif28}; 29 30struct C : A {31#if __cplusplus <= 199711L32// expected-error@-2 {{no suitable member 'operator delete' in 'C'}}33#else34// expected-error@-4 {{deleted function '~C' cannot override a non-deleted function}}35// expected-note@-5  {{virtual destructor requires an unambiguous, accessible 'operator delete'}}36#endif37  void operator delete(void *, int);38#if __cplusplus <= 199711L39// expected-note@-2 {{'operator delete' declared here}}40#endif41}; 42 43void f() {44  (void)new B; 45  (void)new C;46#if __cplusplus <= 199711L47// expected-note@-2 {{implicit destructor for 'C' first required here}}48#endif49}50 51// Make sure that the key-function computation is consistent when the52// first virtual member function of a nested class has an inline body.53struct Outer {54  struct Inner {55    virtual void f() { }56    void g();57  };58};59 60void Outer::Inner::g() { }61