Bug 1814798 - pt 1. Add bool to enable/disable PHC at runtime r=glandium
[gecko.git] / build / clang-plugin / tests / TestTrivialCtorDtor.cpp
bloba1038b6e63ee953cf521430ff0d0aa040c5cf8c8
1 #define MOZ_TRIVIAL_CTOR_DTOR __attribute__((annotate("moz_trivial_ctor_dtor")))
3 struct MOZ_TRIVIAL_CTOR_DTOR EmptyClass{};
5 template <class T>
6 struct MOZ_TRIVIAL_CTOR_DTOR TemplateEmptyClass{};
8 struct MOZ_TRIVIAL_CTOR_DTOR NonEmptyClass {
9 void *m;
12 template <class T>
13 struct MOZ_TRIVIAL_CTOR_DTOR TemplateNonEmptyClass {
14 T* m;
17 struct MOZ_TRIVIAL_CTOR_DTOR BadUserDefinedCtor { // expected-error {{class 'BadUserDefinedCtor' must have trivial constructors and destructors}}
18 BadUserDefinedCtor() {}
21 struct MOZ_TRIVIAL_CTOR_DTOR BadUserDefinedDtor { // expected-error {{class 'BadUserDefinedDtor' must have trivial constructors and destructors}}
22 ~BadUserDefinedDtor() {}
25 struct MOZ_TRIVIAL_CTOR_DTOR BadVirtualDtor { // expected-error {{class 'BadVirtualDtor' must have trivial constructors and destructors}}
26 virtual ~BadVirtualDtor() {}
29 struct MOZ_TRIVIAL_CTOR_DTOR OkVirtualMember {
30 virtual void f();
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(); }
39 struct NonTrivialCtor {
40 NonTrivialCtor() { foo(); }
43 struct NonTrivialDtor {
44 ~NonTrivialDtor() { foo(); }
47 struct VirtualMember {
48 virtual void f();
51 struct MOZ_TRIVIAL_CTOR_DTOR BadNonTrivialCtorInBase : NonTrivialCtor { // expected-error {{class 'BadNonTrivialCtorInBase' must have trivial constructors and destructors}}
54 struct MOZ_TRIVIAL_CTOR_DTOR BadNonTrivialDtorInBase : NonTrivialDtor { // expected-error {{class 'BadNonTrivialDtorInBase' must have trivial constructors and destructors}}
57 struct MOZ_TRIVIAL_CTOR_DTOR BadNonTrivialCtorInMember { // expected-error {{class 'BadNonTrivialCtorInMember' must have trivial constructors and destructors}}
58 NonTrivialCtor m;
61 struct MOZ_TRIVIAL_CTOR_DTOR BadNonTrivialDtorInMember { // expected-error {{class 'BadNonTrivialDtorInMember' must have trivial constructors and destructors}}
62 NonTrivialDtor m;
65 struct MOZ_TRIVIAL_CTOR_DTOR OkVirtualMemberInMember {
66 VirtualMember m;
69 struct MOZ_TRIVIAL_CTOR_DTOR OkConstExprConstructor {
70 constexpr OkConstExprConstructor() {}
73 struct MOZ_TRIVIAL_CTOR_DTOR OkConstExprConstructorInMember {
74 OkConstExprConstructor m;
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;