• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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