@@ -67,60 +67,6 @@ int h2() {
6767 constexpr int x4 = h1_const(1, 1); // COMPLIANT
6868}
6969
70- int h3(int x) { // COMPLIANT - uses goto, so can't be constexpr
71- if (x) {
72- goto l1;
73- } else {
74- return 10;
75- }
76- l1:
77- return 1;
78- }
79-
80- int h4(int x) { // COMPLIANT - uses try, so can't be constexpr
81- try {
82- return 1;
83- } catch (...) {
84- }
85- }
86-
87- int h5(int x) { // COMPLIANT - declares non literal local var
88- NonLiteralClass nlc;
89- }
90-
91- int h6(int x) { // COMPLIANT - declares static variable
92- static int i = x;
93- return x;
94- }
95-
96- int h7(int x) { // COMPLIANT - declares no init variable
97- int i;
98- }
99-
100- int h8(int x) { // NON_COMPLIANT - could be constexpr
101- int i = x;
102- return i;
103- }
104-
105- constexpr int h8_correct(int x) { // COMPLIANT
106- int i = x;
107- return i;
108- }
109-
110- int h9(int x) { // COMPLIANT - declares thread local variable
111- thread_local int i = x;
112- return x;
113- }
114-
115- class ConstexprFunctionClass {
116- public:
117- int mf1(int x) { return m1 + x; } // NON_COMPLIANT
118- constexpr int mf1_correct(int x) { return m1 + x; } // COMPLIANT
119-
120- private:
121- int m1;
122- };
123-
12470class MissingConstexprClass {
12571public:
12672 MissingConstexprClass() = default; // NON_COMPLIANT
@@ -130,82 +76,6 @@ class MissingConstexprClass {
13076 int m1 = 0; // NON_COMPLIANT
13177};
13278
133- class VirtualBaseClass {};
134-
135- class DerivedClass : public virtual VirtualBaseClass {
136- public:
137- DerivedClass() = default; // COMPLIANT
138- DerivedClass(int i) = delete; // COMPLIANT
139- DerivedClass(int i, LiteralClass lc) {} // COMPLIANT
140- private:
141- int m1 = 0; // NON_COMPLIANT
142- };
143-
144- class NotAllMembersInitializedClass {
145- public:
146- NotAllMembersInitializedClass() = default; // COMPLIANT
147- NotAllMembersInitializedClass(int i) = delete; // COMPLIANT
148- NotAllMembersInitializedClass(int i, LiteralClass lc) {} // COMPLIANT
149- private:
150- int m1;
151- };
152-
153- class NonLiteralParamsClass {
154- public:
155- NonLiteralParamsClass(int i, NonLiteralClass lc) {} // COMPLIANT
156- };
157-
158- // Variant members are always initialized, so this can be marked constexpr
159- class VariantMemberInitialized {
160- public:
161- VariantMemberInitialized() = default; // NON_COMPLIANT
162- VariantMemberInitialized(int i) = delete; // NON_COMPLIANT
163- VariantMemberInitialized(int i, LiteralClass lc) {} // NON_COMPLIANT
164- private:
165- union {
166- int i = 0;
167- short s;
168- };
169- };
170-
171- class VariantMemberInitConstexpr {
172- public:
173- constexpr VariantMemberInitConstexpr() = default; // COMPLIANT
174- constexpr VariantMemberInitConstexpr(int i) = delete; // COMPLIANT
175- constexpr VariantMemberInitConstexpr(int i, LiteralClass lc) {} // COMPLIANT
176- private:
177- union {
178- int i = 0;
179- short s;
180- };
181- };
182-
183- // Variant members are not initialized at declaration, so we can only mark the
184- // constructors as constexpr if we explicitly initialize the variant member
185- class VariantMemberNotInit {
186- public:
187- VariantMemberNotInit() = default; // COMPLIANT
188- VariantMemberNotInit(int pi) = delete; // COMPLIANT
189- VariantMemberNotInit(int pi, LiteralClass lc) {} // COMPLIANT
190- VariantMemberNotInit(LiteralClass lc, int pi) : i(pi) {} // NON_COMPLIANT
191- constexpr VariantMemberNotInit(LiteralClass lc, short pi) // COMPLIANT
192- : i(pi) {}
193-
194- private:
195- union {
196- int i;
197- short s;
198- };
199- };
200-
201- class ExcludedCases {
202- public:
203- ~ExcludedCases() {} // COMPLIANT
204-
205- void operator=(ExcludedCases &) {} // COMPLIANT
206- void operator=(ExcludedCases &&) {} // COMPLIANT
207- };
208-
20979extern int random();
21080constexpr int add(int x, int y) { return x + y; }
21181// Example with compile time constant literal value as default argument
0 commit comments