1 /**
2 * Copyright (c) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "libabckit/tests/helpers/helpers_wrong_ctx.h"
17 #include "helpers/helpers.h"
18
19 #include "libabckit/include/c/abckit.h"
20 #include "libabckit/src/include_v2/c/isa/isa_static.h"
21 #include "libabckit/include/c/metadata_core.h"
22 #include "libabckit/include/c/ir_core.h"
23 #include "metadata_inspect_impl.h"
24 #include "ir_impl.h"
25
26 #include <gtest/gtest.h>
27
28 static auto g_impl = AbckitGetApiImpl(ABCKIT_VERSION_RELEASE_1_0_0);
29 static auto g_implI = AbckitGetInspectApiImpl(ABCKIT_VERSION_RELEASE_1_0_0);
30 static auto g_implG = AbckitGetGraphApiImpl(ABCKIT_VERSION_RELEASE_1_0_0);
31 static auto g_implM = AbckitGetModifyApiImpl(ABCKIT_VERSION_RELEASE_1_0_0);
32
33 namespace libabckit::test::helpers_wrong_ctx {
34
35 // NOLINTBEGIN(cppcoreguidelines-pro-type-cstyle-cast)
36 static AbckitGraph *g_dummyGrapH1 = new AbckitGraph();
37 static AbckitGraph *g_dummyGrapH2 = new AbckitGraph();
38
39 static AbckitCoreModule *g_dummyModulE1 = new AbckitCoreModule();
40 static AbckitCoreModule *g_dummyModulE2 = new AbckitCoreModule();
41
42 static AbckitCoreFunction *g_dummyMethoD1 = new AbckitCoreFunction();
43 static AbckitCoreFunction *g_dummyMethoD2 = new AbckitCoreFunction();
44
45 static AbckitFile *g_dummyFilE1 = (AbckitFile *)(0x1);
46 static AbckitFile *g_dummyFilE2 = (AbckitFile *)(0x2);
47
48 static AbckitInst *g_dummyInsT1 = new AbckitInst();
49 static AbckitInst *g_dummyInsT2 = new AbckitInst(g_dummyGrapH2, (ark::compiler::Inst *)0x1);
50 static panda::pandasm::Function *g_dummyPandasmFunction = (panda::pandasm::Function *)(0x1);
51
52 static AbckitString *g_dummyString = (AbckitString *)(0x1);
53
54 static AbckitBasicBlock *g_dummyBB1 = new AbckitBasicBlock();
55 static AbckitBasicBlock *g_dummyBB2 = new AbckitBasicBlock();
56
57 static AbckitLiteralArray *g_dummyLitarr = (AbckitLiteralArray *)(0x1);
58
59 static AbckitCoreExportDescriptor *g_dummyExport = (AbckitCoreExportDescriptor *)(0x1);
60
61 static AbckitType *g_dummyType = (AbckitType *)(0x1);
62 // NOLINTEND(cppcoreguidelines-pro-type-cstyle-cast)
63
TestWrongCtx(void (* apiToCheck)(AbckitCoreFunction * method,AbckitGraph * code))64 void TestWrongCtx(void (*apiToCheck)(AbckitCoreFunction *method, AbckitGraph *code))
65 {
66 g_dummyModulE1->file = g_dummyFilE1;
67 g_dummyModulE2->file = g_dummyFilE2;
68
69 g_dummyMethoD2->owningModule = g_dummyModulE2;
70
71 apiToCheck(g_dummyMethoD2, g_dummyGrapH1);
72 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
73 }
74
TestWrongCtx(void (* apiToCheck)(AbckitBasicBlock * bb1,AbckitInst * inst))75 void TestWrongCtx(void (*apiToCheck)(AbckitBasicBlock *bb1, AbckitInst *inst))
76 {
77 g_dummyBB1->graph = g_dummyGrapH1;
78 g_dummyBB2->graph = g_dummyGrapH2;
79
80 g_dummyInsT1->graph = g_dummyGrapH1;
81 g_dummyInsT2->graph = g_dummyGrapH2;
82
83 apiToCheck(g_dummyBB1, g_dummyInsT2);
84 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
85 }
86
TestWrongCtx(bool (* apiToCheck)(AbckitBasicBlock * bb1,AbckitBasicBlock * bb2))87 void TestWrongCtx(bool (*apiToCheck)(AbckitBasicBlock *bb1, AbckitBasicBlock *bb2))
88 {
89 g_dummyBB1->graph = g_dummyGrapH1;
90 g_dummyBB2->graph = g_dummyGrapH2;
91
92 g_dummyInsT1->graph = g_dummyGrapH1;
93 g_dummyInsT2->graph = g_dummyGrapH2;
94
95 apiToCheck(g_dummyBB1, g_dummyBB2);
96 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
97 }
98
TestWrongCtx(void (* apiToCheck)(AbckitBasicBlock * bb1,AbckitBasicBlock * bb2,bool val))99 void TestWrongCtx(void (*apiToCheck)(AbckitBasicBlock *bb1, AbckitBasicBlock *bb2, bool val))
100 {
101 g_dummyBB1->graph = g_dummyGrapH1;
102 g_dummyBB2->graph = g_dummyGrapH2;
103
104 g_dummyInsT1->graph = g_dummyGrapH1;
105 g_dummyInsT2->graph = g_dummyGrapH2;
106
107 apiToCheck(g_dummyBB1, g_dummyBB2, false);
108 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
109 }
110
TestWrongCtx(void (* apiToCheck)(AbckitBasicBlock * bb1,AbckitBasicBlock * bb2))111 void TestWrongCtx(void (*apiToCheck)(AbckitBasicBlock *bb1, AbckitBasicBlock *bb2))
112 {
113 g_dummyBB1->graph = g_dummyGrapH1;
114 g_dummyBB2->graph = g_dummyGrapH2;
115
116 g_dummyInsT1->graph = g_dummyGrapH1;
117 g_dummyInsT2->graph = g_dummyGrapH2;
118
119 apiToCheck(g_dummyBB1, g_dummyBB2);
120 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
121 }
122
TestWrongCtx(void (* apiToCheck)(AbckitBasicBlock * bb1,AbckitBasicBlock * bb2,uint32_t index))123 void TestWrongCtx(void (*apiToCheck)(AbckitBasicBlock *bb1, AbckitBasicBlock *bb2, uint32_t index))
124 {
125 g_dummyBB1->graph = g_dummyGrapH1;
126 g_dummyBB2->graph = g_dummyGrapH2;
127
128 g_dummyInsT1->graph = g_dummyGrapH1;
129 g_dummyInsT2->graph = g_dummyGrapH2;
130
131 apiToCheck(g_dummyBB1, g_dummyBB2, 0x0);
132 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
133 }
134
TestWrongCtx(bool (* apiToCheck)(AbckitInst * inst,AbckitInst * dominator))135 void TestWrongCtx(bool (*apiToCheck)(AbckitInst *inst, AbckitInst *dominator))
136 {
137 g_dummyInsT1->graph = g_dummyGrapH1;
138 g_dummyInsT2->graph = g_dummyGrapH2;
139
140 bool var = apiToCheck(g_dummyInsT1, g_dummyInsT2);
141 ASSERT_EQ(var, false);
142 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
143 }
144
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1))145 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1))
146 {
147 g_dummyInsT1->graph = g_dummyGrapH1;
148 g_dummyInsT2->graph = g_dummyGrapH2;
149
150 auto *instr = apiToCheck(g_dummyGrapH1, g_dummyInsT2, g_dummyInsT1);
151 ASSERT_EQ(instr, nullptr);
152 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
153
154 instr = apiToCheck(g_dummyGrapH1, g_dummyInsT1, g_dummyInsT2);
155 ASSERT_EQ(instr, nullptr);
156 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
157 }
158
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * input0,uint64_t imm0))159 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *input0, uint64_t imm0))
160 {
161 g_dummyInsT1->graph = g_dummyGrapH1;
162 g_dummyInsT2->graph = g_dummyGrapH2;
163
164 auto *instr = apiToCheck(g_dummyGrapH1, g_dummyInsT2, 0x0);
165 ASSERT_EQ(instr, nullptr);
166 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
167 }
168
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitCoreFunction * method,size_t argCount,...))169 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitCoreFunction *method, size_t argCount, ...))
170 {
171 g_dummyModulE1->file = g_dummyFilE1;
172 g_dummyModulE2->file = g_dummyFilE2;
173
174 g_dummyMethoD1->owningModule = g_dummyModulE1;
175 g_dummyMethoD2->owningModule = g_dummyModulE2;
176
177 g_dummyGrapH1->file = g_dummyFilE1;
178 g_dummyGrapH2->file = g_dummyFilE2;
179
180 auto *instr = apiToCheck(g_dummyGrapH1, g_dummyMethoD2, 0x0);
181 ASSERT_EQ(instr, nullptr);
182 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
183
184 // NOTE varargs processing
185 }
186
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * input0,AbckitTypeId targetType))187 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *input0, AbckitTypeId targetType))
188 {
189 g_dummyInsT1->graph = g_dummyGrapH1;
190 g_dummyInsT2->graph = g_dummyGrapH2;
191
192 auto *instr = apiToCheck(g_dummyGrapH1, g_dummyInsT2, ABCKIT_TYPE_ID_I32);
193 ASSERT_EQ(instr, nullptr);
194 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
195 }
196
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1,AbckitInst * input2))197 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1,
198 AbckitInst *input2))
199 {
200 g_dummyInsT1->graph = g_dummyGrapH1;
201 g_dummyInsT2->graph = g_dummyGrapH2;
202
203 auto *instr = apiToCheck(g_dummyGrapH1, g_dummyInsT2, g_dummyInsT1, g_dummyInsT1);
204 ASSERT_EQ(instr, nullptr);
205 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
206
207 instr = apiToCheck(g_dummyGrapH1, g_dummyInsT1, g_dummyInsT2, g_dummyInsT1);
208 ASSERT_EQ(instr, nullptr);
209 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
210
211 instr = apiToCheck(g_dummyGrapH1, g_dummyInsT1, g_dummyInsT1, g_dummyInsT2);
212 ASSERT_EQ(instr, nullptr);
213 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
214 }
215
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * input0))216 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *input0))
217 {
218 g_dummyInsT1->graph = g_dummyGrapH1;
219 g_dummyInsT2->graph = g_dummyGrapH2;
220
221 auto *instr = apiToCheck(g_dummyGrapH1, g_dummyInsT2);
222 ASSERT_EQ(instr, nullptr);
223 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
224 }
225
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1,AbckitInst * input2,AbckitInst * input3))226 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1,
227 AbckitInst *input2, AbckitInst *input3))
228 {
229 g_dummyInsT1->graph = g_dummyGrapH1;
230 g_dummyInsT2->graph = g_dummyGrapH2;
231
232 auto *instr = apiToCheck(g_dummyGrapH1, g_dummyInsT2, g_dummyInsT1, g_dummyInsT1, g_dummyInsT1);
233 ASSERT_EQ(instr, nullptr);
234 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
235
236 instr = apiToCheck(g_dummyGrapH1, g_dummyInsT1, g_dummyInsT2, g_dummyInsT1, g_dummyInsT1);
237 ASSERT_EQ(instr, nullptr);
238 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
239
240 instr = apiToCheck(g_dummyGrapH1, g_dummyInsT1, g_dummyInsT1, g_dummyInsT2, g_dummyInsT1);
241 ASSERT_EQ(instr, nullptr);
242 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
243
244 instr = apiToCheck(g_dummyGrapH1, g_dummyInsT1, g_dummyInsT1, g_dummyInsT1, g_dummyInsT2);
245 ASSERT_EQ(instr, nullptr);
246 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
247 }
248
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * inst,size_t argCount,...))249 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *inst, size_t argCount, ...))
250 {
251 g_dummyInsT1->graph = g_dummyGrapH1;
252 g_dummyInsT2->graph = g_dummyGrapH2;
253
254 auto *instr = apiToCheck(g_dummyGrapH1, g_dummyInsT2, 0x0);
255 ASSERT_EQ(instr, nullptr);
256 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
257
258 // NOTE varargs processing
259 }
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1,uint64_t imm0,...))260 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1, uint64_t imm0,
261 ...))
262 {
263 g_dummyInsT1->graph = g_dummyGrapH1;
264 g_dummyInsT2->graph = g_dummyGrapH2;
265
266 auto *instr = apiToCheck(g_dummyGrapH1, g_dummyInsT1, g_dummyInsT2, 0x0);
267 ASSERT_EQ(instr, nullptr);
268 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
269
270 // NOTE varargs processing
271 }
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * inst,uint64_t imm0,AbckitInst * inst1))272 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *inst, uint64_t imm0, AbckitInst *inst1))
273 {
274 g_dummyInsT1->graph = g_dummyGrapH1;
275 g_dummyInsT2->graph = g_dummyGrapH2;
276
277 auto *instr = apiToCheck(g_dummyGrapH1, g_dummyInsT2, 0x0, g_dummyInsT1);
278 ASSERT_EQ(instr, nullptr);
279 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
280
281 instr = apiToCheck(g_dummyGrapH1, g_dummyInsT1, 0x0, g_dummyInsT2);
282 ASSERT_EQ(instr, nullptr);
283 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
284 }
285
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * inst,uint64_t imm0,uint64_t imm1,AbckitInst * inst1))286 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *inst, uint64_t imm0, uint64_t imm1,
287 AbckitInst *inst1))
288 {
289 g_dummyInsT1->graph = g_dummyGrapH1;
290 g_dummyInsT2->graph = g_dummyGrapH2;
291
292 auto *instr = apiToCheck(g_dummyGrapH1, g_dummyInsT2, 0x0, 0x0, g_dummyInsT1);
293 ASSERT_EQ(instr, nullptr);
294 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
295
296 instr = apiToCheck(g_dummyGrapH1, g_dummyInsT1, 0x0, 0x0, g_dummyInsT2);
297 ASSERT_EQ(instr, nullptr);
298 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
299 }
300
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitCoreFunction * m,AbckitLiteralArray * litarr,uint64_t val,AbckitInst * inst))301 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitCoreFunction *m, AbckitLiteralArray *litarr,
302 uint64_t val, AbckitInst *inst))
303 {
304 g_dummyModulE1->file = g_dummyFilE1;
305 g_dummyModulE2->file = g_dummyFilE2;
306
307 g_dummyMethoD1->owningModule = g_dummyModulE1;
308 g_dummyMethoD2->owningModule = g_dummyModulE2;
309
310 g_dummyInsT1->graph = g_dummyGrapH1;
311 g_dummyInsT2->graph = g_dummyGrapH2;
312
313 g_dummyGrapH1->file = g_dummyFilE1;
314 g_dummyGrapH2->file = g_dummyFilE2;
315
316 auto *instr = apiToCheck(g_dummyGrapH1, g_dummyMethoD2, g_dummyLitarr, 0x0, g_dummyInsT1);
317 ASSERT_EQ(instr, nullptr);
318 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
319
320 instr = apiToCheck(g_dummyGrapH1, g_dummyMethoD1, g_dummyLitarr, 0x0, g_dummyInsT2);
321 ASSERT_EQ(instr, nullptr);
322 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
323 }
324
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * inst,uint64_t imm0,uint64_t imm1))325 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *inst, uint64_t imm0, uint64_t imm1))
326 {
327 g_dummyInsT1->graph = g_dummyGrapH1;
328 g_dummyInsT2->graph = g_dummyGrapH2;
329
330 auto *instr = apiToCheck(g_dummyGrapH1, g_dummyInsT2, 0x0, 0x0);
331 ASSERT_EQ(instr, nullptr);
332 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
333 }
334
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1,AbckitInst * input2,AbckitInst * input3,AbckitInst * input4))335 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1,
336 AbckitInst *input2, AbckitInst *input3, AbckitInst *input4))
337 {
338 g_dummyInsT1->graph = g_dummyGrapH1;
339 g_dummyInsT2->graph = g_dummyGrapH2;
340
341 auto *instr = apiToCheck(g_dummyGrapH1, g_dummyInsT2, g_dummyInsT1, g_dummyInsT1, g_dummyInsT1, g_dummyInsT1);
342 ASSERT_EQ(instr, nullptr);
343 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
344
345 instr = apiToCheck(g_dummyGrapH1, g_dummyInsT1, g_dummyInsT2, g_dummyInsT1, g_dummyInsT1, g_dummyInsT1);
346 ASSERT_EQ(instr, nullptr);
347 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
348
349 instr = apiToCheck(g_dummyGrapH1, g_dummyInsT1, g_dummyInsT1, g_dummyInsT2, g_dummyInsT1, g_dummyInsT1);
350 ASSERT_EQ(instr, nullptr);
351 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
352
353 instr = apiToCheck(g_dummyGrapH1, g_dummyInsT1, g_dummyInsT1, g_dummyInsT1, g_dummyInsT2, g_dummyInsT1);
354 ASSERT_EQ(instr, nullptr);
355 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
356
357 instr = apiToCheck(g_dummyGrapH1, g_dummyInsT1, g_dummyInsT1, g_dummyInsT1, g_dummyInsT1, g_dummyInsT2);
358 ASSERT_EQ(instr, nullptr);
359 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
360 }
361
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,uint64_t imm,AbckitInst * inst0,AbckitInst * inst1))362 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, uint64_t imm, AbckitInst *inst0, AbckitInst *inst1))
363 {
364 g_dummyInsT1->graph = g_dummyGrapH1;
365 g_dummyInsT2->graph = g_dummyGrapH2;
366
367 auto *instr = apiToCheck(g_dummyGrapH1, 0x0, g_dummyInsT2, g_dummyInsT1);
368 ASSERT_EQ(instr, nullptr);
369 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
370
371 instr = apiToCheck(g_dummyGrapH1, 0x0, g_dummyInsT1, g_dummyInsT2);
372 ASSERT_EQ(instr, nullptr);
373 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
374 }
375
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * input0,AbckitString * input1,AbckitInst * input2))376 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *input0, AbckitString *input1,
377 AbckitInst *input2))
378 {
379 g_dummyInsT1->graph = g_dummyGrapH1;
380 g_dummyInsT2->graph = g_dummyGrapH2;
381
382 auto *instr = apiToCheck(g_dummyGrapH1, g_dummyInsT2, g_dummyString, g_dummyInsT1);
383 ASSERT_EQ(instr, nullptr);
384 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
385
386 instr = apiToCheck(g_dummyGrapH1, g_dummyInsT1, g_dummyString, g_dummyInsT2);
387 ASSERT_EQ(instr, nullptr);
388 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
389 }
390
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitCoreFunction * method,uint64_t imm))391 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitCoreFunction *method, uint64_t imm))
392 {
393 g_dummyModulE1->file = g_dummyFilE1;
394 g_dummyModulE2->file = g_dummyFilE2;
395
396 g_dummyMethoD1->owningModule = g_dummyModulE1;
397 g_dummyMethoD2->owningModule = g_dummyModulE2;
398
399 g_dummyGrapH1->file = g_dummyFilE1;
400 g_dummyGrapH2->file = g_dummyFilE2;
401
402 auto *instr = apiToCheck(g_dummyGrapH1, g_dummyMethoD2, 0x0);
403 ASSERT_EQ(instr, nullptr);
404 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
405 }
406
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * acc,AbckitCoreFunction * method,uint64_t imm0))407 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *acc, AbckitCoreFunction *method,
408 uint64_t imm0))
409 {
410 g_dummyModulE1->file = g_dummyFilE1;
411 g_dummyModulE2->file = g_dummyFilE2;
412
413 g_dummyMethoD1->owningModule = g_dummyModulE1;
414 g_dummyMethoD2->owningModule = g_dummyModulE2;
415
416 g_dummyInsT1->graph = g_dummyGrapH1;
417 g_dummyInsT2->graph = g_dummyGrapH2;
418
419 g_dummyGrapH1->file = g_dummyFilE1;
420 g_dummyGrapH2->file = g_dummyFilE2;
421
422 auto *instr = apiToCheck(g_dummyGrapH1, g_dummyInsT2, g_dummyMethoD1, 0x0);
423 ASSERT_EQ(instr, nullptr);
424 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
425
426 instr = apiToCheck(g_dummyGrapH1, g_dummyInsT1, g_dummyMethoD2, 0x0);
427 ASSERT_EQ(instr, nullptr);
428 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
429 }
430
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitCoreModule * m))431 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitCoreModule *m))
432 {
433 g_dummyModulE1->file = g_dummyFilE1;
434 g_dummyModulE2->file = g_dummyFilE2;
435
436 g_dummyGrapH1->file = g_dummyFilE1;
437
438 auto *instr = apiToCheck(g_dummyGrapH1, g_dummyModulE2);
439 ASSERT_EQ(instr, nullptr);
440 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
441 }
442
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * input0,AbckitIsaApiDynamicConditionCode cc))443 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *input0,
444 AbckitIsaApiDynamicConditionCode cc))
445 {
446 g_dummyInsT1->graph = g_dummyGrapH1;
447 g_dummyInsT2->graph = g_dummyGrapH2;
448
449 auto *instr = apiToCheck(g_dummyGrapH1, g_dummyInsT2, ABCKIT_ISA_API_DYNAMIC_CONDITION_CODE_CC_EQ);
450 ASSERT_EQ(instr, nullptr);
451 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
452 }
453
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * input0,AbckitString * input1))454 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *input0, AbckitString *input1))
455 {
456 g_dummyInsT1->graph = g_dummyGrapH1;
457 g_dummyInsT2->graph = g_dummyGrapH2;
458
459 auto *instr = apiToCheck(g_dummyGrapH1, g_dummyInsT2, g_dummyString);
460 ASSERT_EQ(instr, nullptr);
461 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
462 }
463
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * arrayRef,AbckitInst * idx,AbckitInst * value,AbckitTypeId valueTypeId))464 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *arrayRef, AbckitInst *idx,
465 AbckitInst *value, AbckitTypeId valueTypeId))
466 {
467 g_dummyInsT1->graph = g_dummyGrapH1;
468 g_dummyInsT2->graph = g_dummyGrapH2;
469
470 auto *instr = apiToCheck(g_dummyGrapH1, g_dummyInsT2, g_dummyInsT1, g_dummyInsT1, ABCKIT_TYPE_ID_I32);
471 ASSERT_EQ(instr, nullptr);
472 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
473
474 instr = apiToCheck(g_dummyGrapH1, g_dummyInsT1, g_dummyInsT2, g_dummyInsT1, ABCKIT_TYPE_ID_I32);
475 ASSERT_EQ(instr, nullptr);
476 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
477
478 instr = apiToCheck(g_dummyGrapH1, g_dummyInsT1, g_dummyInsT1, g_dummyInsT2, ABCKIT_TYPE_ID_I32);
479 ASSERT_EQ(instr, nullptr);
480 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
481 }
482
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1,AbckitTypeId typeId))483 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1,
484 AbckitTypeId typeId))
485 {
486 g_dummyInsT1->graph = g_dummyGrapH1;
487 g_dummyInsT2->graph = g_dummyGrapH2;
488
489 auto *instr = apiToCheck(g_dummyGrapH1, g_dummyInsT2, g_dummyInsT1, ABCKIT_TYPE_ID_I32);
490 ASSERT_EQ(instr, nullptr);
491 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
492
493 instr = apiToCheck(g_dummyGrapH1, g_dummyInsT1, g_dummyInsT2, ABCKIT_TYPE_ID_I32);
494 ASSERT_EQ(instr, nullptr);
495 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
496 }
497
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * input0,AbckitCoreExportDescriptor * e))498 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *input0, AbckitCoreExportDescriptor *e))
499 {
500 g_dummyInsT2->graph = g_dummyGrapH2;
501
502 auto *instr = apiToCheck(g_dummyGrapH1, g_dummyInsT2, g_dummyExport);
503 ASSERT_EQ(instr, nullptr);
504 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
505 }
506
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitCoreClass * klass))507 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitCoreClass *klass))
508 {
509 g_dummyModulE2->file = g_dummyFilE2;
510
511 AbckitArktsClass arktsClass(g_dummyPandasmFunction);
512 AbckitCoreClass klass(g_dummyModulE2, arktsClass);
513
514 g_dummyGrapH1->file = g_dummyFilE1;
515
516 apiToCheck(g_dummyGrapH1, &klass);
517 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
518 }
519
TestWrongCtx(void (* apiToCheck)(AbckitInst * inst,AbckitInst * next))520 void TestWrongCtx(void (*apiToCheck)(AbckitInst *inst, AbckitInst *next))
521 {
522 g_dummyInsT1->graph = g_dummyGrapH1;
523 g_dummyInsT2->graph = g_dummyGrapH2;
524
525 apiToCheck(g_dummyInsT1, g_dummyInsT2);
526 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
527 }
528
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1,AbckitIsaApiStaticConditionCode))529 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1,
530 AbckitIsaApiStaticConditionCode))
531 {
532 g_dummyInsT1->graph = g_dummyGrapH1;
533 g_dummyInsT2->graph = g_dummyGrapH2;
534
535 auto *instr = apiToCheck(g_dummyGrapH1, g_dummyInsT2, g_dummyInsT1, ABCKIT_ISA_API_STATIC_CONDITION_CODE_CC_EQ);
536 ASSERT_EQ(instr, nullptr);
537 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
538
539 instr = apiToCheck(g_dummyGrapH1, g_dummyInsT1, g_dummyInsT2, ABCKIT_ISA_API_STATIC_CONDITION_CODE_CC_EQ);
540 ASSERT_EQ(instr, nullptr);
541 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
542 }
543
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1,uint64_t imm0))544 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1, uint64_t imm0))
545 {
546 g_dummyInsT1->graph = g_dummyGrapH1;
547 g_dummyInsT2->graph = g_dummyGrapH2;
548
549 auto *instr = apiToCheck(g_dummyGrapH1, g_dummyInsT2, g_dummyInsT1, 0x0);
550 ASSERT_EQ(instr, nullptr);
551 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
552
553 instr = apiToCheck(g_dummyGrapH1, g_dummyInsT1, g_dummyInsT2, 0x0);
554 ASSERT_EQ(instr, nullptr);
555 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
556 }
557
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitCoreClass * klass,AbckitInst * input0))558 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitCoreClass *klass, AbckitInst *input0))
559 {
560 g_dummyModulE1->file = g_dummyFilE1;
561 g_dummyModulE2->file = g_dummyFilE2;
562
563 AbckitArktsClass arktsClass(g_dummyPandasmFunction);
564 AbckitCoreClass clasS1(g_dummyModulE2, arktsClass);
565
566 g_dummyGrapH1->file = g_dummyFilE1;
567 g_dummyGrapH2->file = g_dummyFilE2;
568
569 g_dummyInsT1->graph = g_dummyGrapH1;
570 g_dummyInsT2->graph = g_dummyGrapH2;
571
572 auto *instr = apiToCheck(g_dummyGrapH1, &clasS1, g_dummyInsT1);
573 ASSERT_EQ(instr, nullptr);
574 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
575
576 AbckitCoreClass clasS2(g_dummyModulE1, arktsClass);
577
578 instr = apiToCheck(g_dummyGrapH1, &clasS2, g_dummyInsT2);
579 ASSERT_EQ(instr, nullptr);
580 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
581 }
582
TestWrongCtx(void (* apiToCheck)(AbckitInst * input0,AbckitCoreFunction * method))583 void TestWrongCtx(void (*apiToCheck)(AbckitInst *input0, AbckitCoreFunction *method))
584 {
585 g_dummyModulE2->file = g_dummyFilE2;
586
587 g_dummyMethoD2->owningModule = g_dummyModulE2;
588
589 g_dummyInsT1->graph = g_dummyGrapH1;
590
591 g_dummyGrapH1->file = g_dummyFilE1;
592
593 apiToCheck(g_dummyInsT1, g_dummyMethoD2);
594 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
595 }
596
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * input0,AbckitType * type))597 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *input0, AbckitType *type))
598 {
599 g_dummyModulE1->file = g_dummyFilE1;
600 g_dummyModulE2->file = g_dummyFilE2;
601
602 g_dummyGrapH1->file = g_dummyFilE1;
603 g_dummyGrapH2->file = g_dummyFilE2;
604
605 g_dummyInsT1->graph = g_dummyGrapH1;
606 g_dummyInsT2->graph = g_dummyGrapH2;
607
608 auto *instr = apiToCheck(g_dummyGrapH1, g_dummyInsT2, g_dummyType);
609 ASSERT_EQ(instr, nullptr);
610 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
611 }
612
TestWrongCtx(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * input0,AbckitCoreFunction * method,size_t argCount,...))613 void TestWrongCtx(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *input0, AbckitCoreFunction *method,
614 size_t argCount, ...))
615 {
616 g_dummyModulE1->file = g_dummyFilE1;
617 g_dummyModulE2->file = g_dummyFilE2;
618
619 g_dummyMethoD1->owningModule = g_dummyModulE1;
620 g_dummyMethoD2->owningModule = g_dummyModulE2;
621
622 g_dummyInsT1->graph = g_dummyGrapH1;
623 g_dummyInsT2->graph = g_dummyGrapH2;
624
625 g_dummyGrapH1->file = g_dummyFilE1;
626 g_dummyGrapH2->file = g_dummyFilE2;
627
628 auto *instr = apiToCheck(g_dummyGrapH1, g_dummyInsT1, g_dummyMethoD2, 0x0);
629 ASSERT_EQ(instr, nullptr);
630 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
631
632 instr = apiToCheck(g_dummyGrapH1, g_dummyInsT2, g_dummyMethoD1, 0x0);
633 ASSERT_EQ(instr, nullptr);
634 ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_WRONG_CTX);
635 }
636
637 } // namespace libabckit::test::helpers_wrong_ctx
638