tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

TestTrivialCtorDtor.cpp (2765B)


      1 #define MOZ_TRIVIAL_CTOR_DTOR __attribute__((annotate("moz_trivial_ctor_dtor")))
      2 
      3 struct MOZ_TRIVIAL_CTOR_DTOR EmptyClass{};
      4 
      5 template <class T>
      6 struct MOZ_TRIVIAL_CTOR_DTOR TemplateEmptyClass{};
      7 
      8 struct MOZ_TRIVIAL_CTOR_DTOR NonEmptyClass {
      9  void *m;
     10 };
     11 
     12 template <class T>
     13 struct MOZ_TRIVIAL_CTOR_DTOR TemplateNonEmptyClass {
     14  T* m;
     15 };
     16 
     17 struct MOZ_TRIVIAL_CTOR_DTOR BadUserDefinedCtor { // expected-error {{class 'BadUserDefinedCtor' must have trivial constructors and destructors}}
     18  BadUserDefinedCtor() {}
     19 };
     20 
     21 struct MOZ_TRIVIAL_CTOR_DTOR BadUserDefinedDtor { // expected-error {{class 'BadUserDefinedDtor' must have trivial constructors and destructors}}
     22  ~BadUserDefinedDtor() {}
     23 };
     24 
     25 struct MOZ_TRIVIAL_CTOR_DTOR BadVirtualDtor { // expected-error {{class 'BadVirtualDtor' must have trivial constructors and destructors}}
     26  virtual ~BadVirtualDtor() {}
     27 };
     28 
     29 struct MOZ_TRIVIAL_CTOR_DTOR OkVirtualMember {
     30  virtual void f();
     31 };
     32 
     33 void foo();
     34 struct MOZ_TRIVIAL_CTOR_DTOR BadNonEmptyCtorDtor { // expected-error {{class 'BadNonEmptyCtorDtor' must have trivial constructors and destructors}}
     35  BadNonEmptyCtorDtor() { foo(); }
     36  ~BadNonEmptyCtorDtor() { foo(); }
     37 };
     38 
     39 struct NonTrivialCtor {
     40  NonTrivialCtor() { foo(); }
     41 };
     42 
     43 struct NonTrivialDtor {
     44  ~NonTrivialDtor() { foo(); }
     45 };
     46 
     47 struct VirtualMember {
     48  virtual void f();
     49 };
     50 
     51 struct MOZ_TRIVIAL_CTOR_DTOR BadNonTrivialCtorInBase : NonTrivialCtor { // expected-error {{class 'BadNonTrivialCtorInBase' must have trivial constructors and destructors}}
     52 };
     53 
     54 struct MOZ_TRIVIAL_CTOR_DTOR BadNonTrivialDtorInBase : NonTrivialDtor { // expected-error {{class 'BadNonTrivialDtorInBase' must have trivial constructors and destructors}}
     55 };
     56 
     57 struct MOZ_TRIVIAL_CTOR_DTOR BadNonTrivialCtorInMember { // expected-error {{class 'BadNonTrivialCtorInMember' must have trivial constructors and destructors}}
     58  NonTrivialCtor m;
     59 };
     60 
     61 struct MOZ_TRIVIAL_CTOR_DTOR BadNonTrivialDtorInMember { // expected-error {{class 'BadNonTrivialDtorInMember' must have trivial constructors and destructors}}
     62  NonTrivialDtor m;
     63 };
     64 
     65 struct MOZ_TRIVIAL_CTOR_DTOR OkVirtualMemberInMember {
     66  VirtualMember m;
     67 };
     68 
     69 struct MOZ_TRIVIAL_CTOR_DTOR OkConstExprConstructor {
     70  constexpr OkConstExprConstructor() {}
     71 };
     72 
     73 struct MOZ_TRIVIAL_CTOR_DTOR OkConstExprConstructorInMember {
     74  OkConstExprConstructor m;
     75 };
     76 
     77 #if __cplusplus >= 202002L
     78 struct
     79 #else
     80 // XXX: This error is unfortunate, but is unlikely to come up in real code.
     81 // In this situation, it should be possible to define a constexpr constructor
     82 // which explicitly initializes the members.
     83 struct // expected-error {{class 'BadUnfortunateError' must have trivial constructors and destructors}}
     84 #endif
     85 MOZ_TRIVIAL_CTOR_DTOR BadUnfortunateError {
     86  OkConstExprConstructor m;
     87  void *n;
     88 };