brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · 319cad7 Raw
88 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -triple %itanium_abi_triple -verify %s2// RUN: %clang_cc1 -fsyntax-only -triple %itanium_abi_triple -verify -std=c++98 %s3// RUN: %clang_cc1 -fsyntax-only -triple %itanium_abi_triple -verify -std=c++11 %s4// RUN: %clang_cc1 -fsyntax-only -triple %ms_abi_triple -DMSABI -verify %s5// RUN: %clang_cc1 -fsyntax-only -triple %ms_abi_triple -DMSABI -verify -std=c++98 %s6// RUN: %clang_cc1 -fsyntax-only -triple %ms_abi_triple -DMSABI -verify -std=c++11 %s7 8struct A {9  virtual ~A();10#if __cplusplus >= 201103L11// expected-note@-2 3 {{overridden virtual function is here}}12#endif13};14 15struct B : A {16#if __cplusplus <= 199711L17// expected-error@-2 {{no suitable member 'operator delete' in 'B'}}18#else19// expected-error@-4 {{deleted function '~B' cannot override a non-deleted function}}20// expected-note@-5  {{virtual destructor requires an unambiguous, accessible 'operator delete'}}21#ifdef MSABI22// expected-note@-7 {{virtual destructor requires an unambiguous, accessible 'operator delete'}}23#endif24#endif25  virtual void f();26 27  void operator delete (void *, int);28#if __cplusplus <= 199711L29// expected-note@-2 {{'operator delete' declared here}}30#endif31};32 33#ifdef MSABI34B b;35#if __cplusplus <= 199711L36// expected-note@-2 {{implicit destructor for 'B' first required here}}37#else38// expected-error@-4 {{attempt to use a deleted function}}39#endif40 41#else42void B::f() {43#if __cplusplus <= 199711L44// expected-note@-2 {{implicit destructor for 'B' first required here}}45#endif46}47#endif48 49struct C : A {50#if __cplusplus <= 199711L51// expected-error@-2 {{no suitable member 'operator delete' in 'C'}}52#else53// expected-error@-4 {{deleted function '~C' cannot override a non-deleted function}}54// expected-note@-5  {{virtual destructor requires an unambiguous, accessible 'operator delete'}}55#endif56 57  C();58  void operator delete(void *, int);59#if __cplusplus <= 199711L60// expected-note@-2 {{'operator delete' declared here}}61#endif62};63 64C::C() { }65#if __cplusplus <= 199711L66// expected-note@-2 {{implicit destructor for 'C' first required here}}67#endif68 69struct D : A {70#if __cplusplus <= 199711L71// expected-error@-2 {{no suitable member 'operator delete' in 'D'}}72#else73// expected-error@-4 {{deleted function '~D' cannot override a non-deleted function}}74// expected-note@-5  {{virtual destructor requires an unambiguous, accessible 'operator delete'}}75#endif76  void operator delete(void *, int);77#if __cplusplus <= 199711L78// expected-note@-2 {{'operator delete' declared here}}79#endif80}; 81 82void f() {83  new D;84#if __cplusplus <= 199711L85// expected-note@-2 {{implicit destructor for 'D' first required here}}86#endif87}88