• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2021-2022 Huawei Device Co., Ltd.
2# Licensed under the Apache License, Version 2.0 (the "License");
3# you may not use this file except in compliance with the License.
4# You may obtain a copy of the License at
5#
6# http://www.apache.org/licenses/LICENSE-2.0
7#
8# Unless required by applicable law or agreed to in writing, software
9# distributed under the License is distributed on an "AS IS" BASIS,
10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13
14definitions:
15  - name: obj-param-ctor
16    template: |
17        .record Obj {
18          i32 fld1
19        }
20
21        .function void Obj.ctor(Obj a0, i32 a1) <ctor> {
22            lda a1
23            stobj a0, Obj.fld1
24            return.void
25        }
26  - name: obj-ctor
27    template: |
28        .record Obj {}
29
30        .function void Obj.ctor(Obj a0) <ctor> {
31            return.void
32        }
33  - name: PandaAssembly
34    template: >
35      .language PandaAssembly
36tests:
37  - file-name: "return.obj"
38    isa:
39      title: Return value from method
40      description: >
41        Return from the current method, i.e. restore the frame of method invoker and return control to the
42        invoker. Return value should be in accumulator.
43      exceptions:
44        - x_none
45    commands:
46      - file-name: "call_s_p"
47        isa:
48          instructions:
49            - sig: return.obj
50              acc: in:ref
51              format: [op_none]
52        description: Check 'return.obj' returns control flow to caller in Pandasm context with static call.
53        tags: ['tsan']
54        header-template: [obj-param-ctor]
55        code-template: |
56          .function Obj func(%s) {
57              movi v0, 0x12345678
58              initobj.short Obj.ctor, v0
59              return.obj
60          }
61
62          .function i32 main() {
63              %s
64              call func%s
65              sta.obj v0
66              ldobj v0, Obj.fld1
67              movi v1, 0x12345678
68              jeq v1, ok
69              ldai 1
70              return
71          ok:
72        check-type: exit-positive
73        cases:
74          - values:
75              - ''
76              - ''
77              - ''
78          - values:
79              - 'i32 a0'
80              - 'movi v0, 0x12345678'
81              - ', v0'
82          - values:
83              - 'i32 a0, f64 a1'
84              - |
85                #
86                    movi v0, 0
87                    fmovi.64 v1, 1.2
88              - ', v0, v1'
89          - values:
90              - 'i32 a0, f64 a1, i64 a2'
91              - |
92                #
93                    movi v0, 0
94                    fmovi.64 v1, 1.2
95                    movi.64 v2, 0xFF
96              - ', v0, v1, v2'
97          - values:
98              - 'i32 a0, f64 a1, i64 a2, Obj a3'
99              - |
100                #
101                    movi v0, 0
102                    fmovi.64 v1, 1.2
103                    movi.64 v2, 0xFF
104                    mov.null v3
105              - ', v0, v1, v2, v3'
106
107      - file-name: "call_s_j"
108        isa:
109          instructions:
110            - sig: return.obj
111              acc: in:ref
112              format: [op_none]
113        description: Check 'return.obj' returns control flow to caller in PandaAssembly context with static call.
114        runner-options: [use-pa]
115        tags: ['tsan']
116        header-template: [PandaAssembly, obj-param-ctor]
117        code-template: |
118          .function Obj Obj.func(%s) {
119              movi v0, 0x12345678
120              initobj.short Obj.ctor, v0
121              return.obj
122          }
123
124          .function i32 main() {
125              %s
126              call Obj.func%s
127              sta.obj v0
128              ldobj v0, Obj.fld1
129              movi v1, 0x12345678
130              jeq v1, ok
131              ldai 1
132              return
133          ok:
134        check-type: exit-positive
135        cases:
136          - values:
137              - ''
138              - ''
139              - ''
140          - values:
141              - 'i32 a0'
142              - 'movi v0, 0x12345678'
143              - ', v0'
144          - values:
145              - 'i32 a0, f64 a1'
146              - |
147                #
148                    movi v0, 0
149                    fmovi.64 v1, 1.2
150              - ', v0, v1'
151          - values:
152              - 'i32 a0, f64 a1, i64 a2'
153              - |
154                #
155                    movi v0, 0
156                    fmovi.64 v1, 1.2
157                    movi.64 v2, 0xFF
158              - ', v0, v1, v2'
159          - values:
160              - 'i32 a0, f64 a1, i64 a2, Obj a3'
161              - |
162                #
163                    movi v0, 0
164                    fmovi.64 v1, 1.2
165                    movi.64 v2, 0xFF
166                    mov.null v3
167              - ', v0, v1, v2, v3'
168
169      - file-name: "call_v_p"
170        isa:
171          instructions:
172            - sig: return.obj
173              acc: in:ref
174              format: [op_none]
175        description: Check 'return.obj' returns control flow to caller in Pandasm context with virtual call.
176        tags: ['tsan']
177        header-template: [obj-param-ctor]
178        code-template: |
179          .function Obj Obj.func(Obj a0%s) {
180              movi v0, 0x12345678
181              initobj.short Obj.ctor, v0
182              return.obj
183          }
184
185          .function i32 main() {
186              %s
187              newobj v10, Obj
188              call.virt Obj.func, v10%s
189              sta.obj v0
190              ldobj v0, Obj.fld1
191              movi v1, 0x12345678
192              jeq v1, ok
193              ldai 1
194              return
195          ok:
196        check-type: exit-positive
197        cases:
198          - values:
199              - ''
200              - ''
201              - ''
202          - values:
203              - ', i32 a1'
204              - 'movi v0, 0x12345678'
205              - ', v0'
206          - values:
207              - ', i32 a1, f64 a2'
208              - |
209                #
210                    movi v0, 0
211                    fmovi.64 v1, 1.2
212              - ', v0, v1'
213          - values:
214              - ', i32 a1, f64 a2, i64 a3'
215              - |
216                #
217                    movi v0, 0
218                    fmovi.64 v1, 1.2
219                    movi.64 v2, 0xFF
220              - ', v0, v1, v2'
221
222      - file-name: "call_v_j"
223        isa:
224          instructions:
225            - sig: return.obj
226              acc: in:ref
227              format: [op_none]
228        description: Check 'return.obj' returns control flow to caller in PandaAssembly context with virtual call.
229        runner-options: ['use-pa']
230        tags: ['tsan']
231        header-template: [PandaAssembly, obj-param-ctor]
232        code-template: |
233          .function Obj Obj.func(Obj a0%s) {
234              movi v0, 0x12345678
235              initobj.short Obj.ctor, v0
236              return.obj
237          }
238          .record Obj2 <panda.extends=Obj> {}
239
240          .function i32 main() {
241              %s
242              newobj v10, Obj2
243              call.virt Obj.func, v10%s
244              sta.obj v0
245              ldobj v0, Obj.fld1
246              movi v1, 0x12345678
247              jeq v1, ok
248              ldai 1
249              return
250          ok:
251        check-type: exit-positive
252        cases:
253          - values:
254              - ''
255              - ''
256              - ''
257          - values:
258              - ', i32 a1'
259              - 'movi v0, 0x12345678'
260              - ', v0'
261          - values:
262              - ', i32 a1, f64 a2'
263              - |
264                #
265                    movi v0, 0
266                    fmovi.64 v1, 1.2
267              - ', v0, v1'
268          - values:
269              - ', i32 a1, f64 a2, i64 a3'
270              - |
271                #
272                    movi v0, 0
273                    fmovi.64 v1, 1.2
274                    movi.64 v2, 0xFF
275              - ', v0, v1, v2'
276
277      - file-name: "op_none_null"
278        isa:
279          instructions:
280            - sig: return.obj
281              acc: in:ref
282              format: [op_none]
283        description: Check 'return.obj' returns control flow to caller.
284        header-template: [obj-param-ctor]
285        code-template: |
286          .function Obj func(%s) {
287              lda.null
288              return.obj
289          }
290
291          .function i32 main() {
292              %s
293              call func%s
294              mov.null v0
295              jne.obj v0, return_ne_num
296              ldai 0
297              return
298          return_ne_num:
299              ldai 1
300              return
301        cases:
302          - values:
303              - ''
304              - ''
305              - ''
306
307          - values:
308              - 'i32 a0'
309              - 'movi v0, 0x12345678'
310              - ', v0'
311
312          - values:
313              - 'i32 a0, f64 a1'
314              - |
315                #
316                    movi v0, 0
317                    fmovi.64 v1, 1.2
318              - ', v0, v1'
319          - values:
320              - 'i32 a0, f64 a1, i64 a2'
321              - |
322                #
323                    movi v0, 0
324                    fmovi.64 v1, 1.2
325                    movi.64 v2, 0xFF
326              - ', v0, v1, v2'
327
328          - values:
329              - 'i32 a0, f64 a1, i64 a2, Obj a3'
330              - |
331                #
332                    movi v0, 0
333                    fmovi.64 v1, 1.2
334                    movi.64 v2, 0xFF
335                    mov.null v3
336              - ', v0, v1, v2, v3'
337
338      - file-name: "type"
339        tags: [verifier]
340        bugid: ['1324']
341        runner-options: ['verifier-failure', 'verifier-config']
342        isa:
343          instructions:
344            - sig: return.obj
345              acc: in:ref
346              format: [op_none]
347          verification:
348            - acc_return_type
349        header-template: []
350        code-template: |
351          .record panda.Object <external>
352          .function %s func() {
353              *s
354              return.obj
355          }
356
357          .function i32 main() {
358              call.short func
359        check-type: exit-positive
360        description: Check that 'return.obj' is used with correct accumulator value and function return type.
361        template-cases:
362          - values: [void]
363          - values: [u1]
364          - values: [i8]
365          - values: [u8]
366          - values: [i16]
367          - values: [u16]
368          - values: [i32]
369          - values: [u32]
370          - values: [i64]
371          - values: [u64]
372          - values: [f32]
373          - values: [f64]
374          - values: [panda.Object]
375            exclude: [case_obj]
376            bugid: ['7360']
377            ignore: true
378        cases:
379          - values: ['']
380          - values: [ldai 0]
381          - values: [ldai.64 0]
382          - values: [fldai 0]
383          - values: [fldai.64 0]
384          - values: [lda.null]
385            id: case_obj
386          - values: [lda.str "some string"]
387            id: case_obj
388          - values:
389              - initobj Obj.ctor
390            case-header-template: [obj-ctor]
391            id: case_obj
392          - values:
393              - lda.type Obj
394            case-header-template: [obj-ctor]
395            id: case_obj
396
397      - file-name: "wrong_return"
398        tags: [verifier]
399        runner-options: ['verifier-failure', 'verifier-config']
400        isa:
401          instructions:
402            - sig: return.obj
403              acc: in:ref
404              format: [op_none]
405        header-template: [obj-ctor]
406        code-template: |
407          .function Obj func() {
408              initobj Obj.ctor
409              %s
410          }
411
412          .function i32 main() {
413              call.short func
414        check-type: exit-positive
415        description: Check the verifier behavior when expected 'return.obj' is not given.
416        cases:
417          - values: [""]
418          - values: ["return.void"]
419          - values: ["return"]
420          - values: ["return.64"]
421
422      - file-name: "regs_restore"
423        isa:
424          instructions:
425            - sig: return.obj
426              acc: in:ref
427              format: [op_none]
428        header-template: [obj_ctor]
429        code-template: |
430          .function Obj func(%s) {
431              %s
432              initobj.short Obj.ctor
433              return.obj
434          }
435
436          .function i32 main() {
437              %s
438              call func%s
439              %s
440        description: Check that after 'return.obj' register are restored in caller.
441        cases:
442          - values:
443              - ''
444              - ''
445              - 'movi v0, 0x12345678'
446              - ''
447              - |
448                #
449                    ldai 0x12345678
450                    jne v0, set_failure
451                    ldai 0
452                    jmp fall_through
453                set_failure:
454                    ldai 1
455                fall_through:
456            description: "Register is not used in function."
457          - values:
458              - 'i32 a0'
459              - 'movi v0, 0x87654321'
460              - 'movi v0, 0x12345678'
461              - ', v0'
462              - |
463                #
464                    ldai 0x12345678
465                    jne v0, set_failure
466                    ldai 0
467                    jmp fall_through
468                set_failure:
469                    ldai 1
470                fall_through:
471            description: "Register is used in function."
472          - values:
473              - 'i32 a0'
474              - ''
475              - 'movi v0, 0x12345678'
476              - ', v0'
477              - |
478                #
479                    ldai 0x12345678
480                    jne v0, set_failure
481                    ldai 0
482                    jmp fall_through
483                set_failure:
484                    ldai 1
485                fall_through:
486            description: "Register is not used in function."
487          - values:
488              - 'f64 a0, i64 a1'
489              - |
490                #
491                    fmovi.64 v0, 0
492                    movi.64 v1, 0
493              - |
494                #
495                    fmovi.64 v0, 3.1415926535
496                    movi.64 v1, 0x123456789ABCDEF0
497              - ', v0, v1'
498              - |
499                #
500                    fldai.64 3.1415926535
501                    fcmpg.64 v0
502                    jeqz check2
503                    ldai 1
504                    return
505                check2:
506                    ldai.64 0x123456789ABCDEF0
507                    cmp.64 v1
508            description: "Registers are used in function."
509          - values:
510              - 'f64 a0, i64 a1, i32 a2, f64 a3'
511              - |
512                #
513                    fmovi.64 v0, 0
514                    movi.64 v1, 0
515                    movi v2, 0
516                    fmovi.64 v3, 0
517              - |
518                #
519                    fmovi.64 v0, 3.1415926535
520                    movi.64 v1, 0x123456789ABCDEF0
521                    movi v2, 123456789
522                    fmovi.64 v3, 0x8000000000000001
523              - ', v0, v1, v2, v3'
524              - |
525                #
526                    fldai.64 3.1415926535
527                    fcmpg.64 v0
528                    jeqz check1
529                    ldai 1
530                    return
531                check1:
532                    ldai.64 0x123456789ABCDEF0
533                    cmp.64 v1
534                    jeqz check2
535                    ldai 1
536                    return
537                check2:
538                    ldai 123456789
539                    jeq v2, check3
540                    ldai 1
541                    return
542                check3:
543                    fldai.64 0x8000000000000001
544                    fcmpg.64 v3
545            description: "Registers are used in function."
546
547      - file-name: "static_return_type_arr"
548        isa:
549          instructions:
550            - sig: return.obj
551              acc: in:ref
552              format: [op_none]
553          verification:
554            - acc_return_type
555        header-template: []
556        code-template: |
557          # Records definition to all tests in group.
558          .record panda.Object <external>
559          .record panda.String <external>
560          .record panda.Class <external>
561          .record A {}
562          %s
563
564          .function %s %sfunc(%s a0) <static> {
565              %s
566              lda.obj a0
567              return.obj
568          }
569
570          .function i32 main() {
571              movi v0, 123
572              newarr v0, v0, *s
573              call.short %sfunc, v0
574              %s
575              jne.obj v0, return_ne_num
576              ldai 0
577              return
578          return_ne_num:
579              ldai 1
580              return
581        template-cases:
582          - values:
583              - '##-'
584              - 'panda.Object'
585              - ''
586              - 'panda.Object'
587              - "##- %s %s - this line will be removed"
588              - ''
589              - |
590                #
591                    sta.obj v2
592                    isinstance %s
593                    movi v1, 1
594                    jeq v1, check_val
595                    ldai 1
596                    return
597                check_val:
598                    lda.obj v2
599            bugid: ['1805']
600          - values:
601              - |
602                .record B {}
603              - 'panda.Object'
604              - 'B.'
605              - 'panda.Object'
606              - "##- %s %s - this line will be removed"
607              - 'B.'
608              - |
609                #
610                    sta.obj v2
611                    isinstance %s
612                    movi v1, 1
613                    jeq v1, check_val
614                    ldai 1
615                    return
616                check_val:
617                    lda.obj v2
618            bugid: ['1805']
619          - values:
620              - '##-'
621              - '%s'
622              - ''
623              - '%s'
624              - '##-'
625              - ''
626              - ''
627          - values:
628              - |
629                .record B {}
630              - '%s'
631              - 'B.'
632              - '%s'
633              - ''
634              - 'B.'
635              - ''
636        description: Check 'return.obj' return object with different types.
637        cases:
638          - values: ['u1[]', 'u1[]', 'u1[]', 'u1[]']
639          - values: ['u8[]', 'u8[]', 'u8[]', 'u8[]']
640          - values: ['i8[]', 'i8[]', 'i8[]', 'i8[]']
641          - values: ['u16[]', 'u16[]', 'u16[]', 'u16[]']
642          - values: ['i16[]', 'i16[]', 'i16[]', 'i16[]']
643          - values: ['i32[]', 'i32[]', 'i32[]', 'i32[]']
644          - values: ['i64[]', 'i64[]', 'i64[]', 'i64[]']
645          - values: ['f64[]', 'f64[]', 'f64[]', 'f64[]']
646          - values:
647              - 'panda.Object[]'
648              - 'panda.Object[]'
649              - 'panda.Object[]'
650              - 'panda.Object[]'
651          - values:
652              - 'panda.String[]'
653              - 'panda.String[]'
654              - 'panda.String[]'
655              - 'panda.String[]'
656          - values:
657              - 'panda.Class[]'
658              - 'panda.Class[]'
659              - 'panda.Class[]'
660              - 'panda.Class[]'
661          - values: ['A[]', 'A[]', 'A[]', 'A[]']
662
663      - file-name: "virt_return_type_arr"
664        isa:
665          instructions:
666            - sig: return.obj
667              acc: in:ref
668              format: [op_none]
669          verification:
670            - acc_return_type
671        header-template: []
672        code-template: |
673          # Records definition to all tests in group.
674          .record panda.Object <external>
675          .record panda.String <external>
676          .record panda.Class <external>
677          .record A {}
678          .record B {}
679
680          .function void B.ctor(B a0) <ctor> {
681              return.void
682          }
683
684          .function %s B.func(B a0, %s a1) {
685              %s
686              lda.obj a1
687              return.obj
688          }
689
690          .function i32 main() {
691              movi v0, 123
692              newarr v0, v0, *s
693              initobj B.ctor
694              sta.obj v3
695              call.virt.short B.func, v3, v0
696              %s
697              jne.obj v0, return_ne_num
698              ldai 0
699              return
700          return_ne_num:
701              ldai 1
702              return
703        template-cases:
704          - values:
705              - 'panda.Object'
706              - 'panda.Object'
707              - "##- %s %s - this line will be removed"
708              - |
709                #
710                    sta.obj v2
711                    isinstance %s
712                    movi v1, 1
713                    jeq v1, check_val
714                    ldai 1
715                    return
716                check_val:
717                    lda.obj v2
718            bugid: ['1805']
719
720          - values:
721              - '%s'
722              - '%s'
723              - '##-'
724              - ''
725
726        description: Check 'return.obj' return object from virtual method with different types.
727        cases:
728          - values: ['u1[]', 'u1[]', 'u1[]', 'u1[]']
729          - values: ['u8[]', 'u8[]', 'u8[]', 'u8[]']
730          - values: ['i8[]', 'i8[]', 'i8[]', 'i8[]']
731          - values: ['u16[]', 'u16[]', 'u16[]', 'u16[]']
732          - values: ['i16[]', 'i16[]', 'i16[]', 'i16[]']
733          - values: ['i32[]', 'i32[]', 'i32[]', 'i32[]']
734          - values: ['i64[]', 'i64[]', 'i64[]', 'i64[]']
735          - values: ['f64[]', 'f64[]', 'f64[]', 'f64[]']
736          - values:
737              - 'panda.Object[]'
738              - 'panda.Object[]'
739              - 'panda.Object[]'
740              - 'panda.Object[]'
741          - values:
742              - 'panda.String[]'
743              - 'panda.String[]'
744              - 'panda.String[]'
745              - 'panda.String[]'
746          - values:
747              - 'panda.Class[]'
748              - 'panda.Class[]'
749              - 'panda.Class[]'
750              - 'panda.Class[]'
751          - values: ['A[]', 'A[]', 'A[]', 'A[]']
752
753      - file-name: "j_virt_return_type_arr"
754        isa:
755          instructions:
756            - sig: return.obj
757              acc: in:ref
758              format: [op_none]
759          verification:
760            - acc_return_type
761        header-template: [PandaAssembly]
762        runner-options: [use-pa]
763        code-template: |
764          # Records definition to all tests in group.
765          .record panda.Object <external>
766          .record panda.String <external>
767          .record panda.Class <external>
768          .record A {}
769
770          .record B {}
771          .record C <panda.extends=B> {}
772
773          .function void C.ctor(C a0) <ctor> {
774              return.void
775          }
776
777          .function %s B.func(B a0, %s a1) {
778              %s
779              lda.obj a1
780              return.obj
781          }
782
783          .function i32 main() {
784              movi v0, 123
785              newarr v0, v0, *s
786              initobj C.ctor
787              sta.obj v3
788              call.virt.short B.func, v3, v0
789              %s
790              jne.obj v0, return_ne_num
791              ldai 0
792              return
793          return_ne_num:
794              ldai 1
795              return
796        template-cases:
797          - values:
798              - 'panda.Object'
799              - 'panda.Object'
800              - "##- %s %s - this line will be removed"
801              - |
802                #
803                    sta.obj v2
804                    isinstance %s
805                    movi v1, 1
806                    jeq v1, check_val
807                    ldai 1
808                    return
809                check_val:
810                    lda.obj v2
811            bugid: ['1805']
812
813          - values:
814              - '%s'
815              - '%s'
816              - '##-'
817              - ''
818
819        description: Check 'return.obj' return object from virtual method with different types.
820        cases:
821          - values: ['u1[]', 'u1[]', 'u1[]', 'u1[]']
822          - values: ['i8[]', 'i8[]', 'i8[]', 'i8[]']
823          - values: ['u16[]', 'u16[]', 'u16[]', 'u16[]']
824          - values: ['i16[]', 'i16[]', 'i16[]', 'i16[]']
825          - values: ['i32[]', 'i32[]', 'i32[]', 'i32[]']
826          - values: ['i64[]', 'i64[]', 'i64[]', 'i64[]']
827          - values: ['f64[]', 'f64[]', 'f64[]', 'f64[]']
828          - values:
829              - 'panda.Object[]'
830              - 'panda.Object[]'
831              - 'panda.Object[]'
832              - 'panda.Object[]'
833          - values:
834              - 'panda.String[]'
835              - 'panda.String[]'
836              - 'panda.String[]'
837              - 'panda.String[]'
838          - values:
839              - 'panda.Class[]'
840              - 'panda.Class[]'
841              - 'panda.Class[]'
842              - 'panda.Class[]'
843          - values: ['A[]', 'A[]', 'A[]', 'A[]']
844
845
846      - file-name: "uninitialized_acc_s_p"
847        tags: [verifier]
848        runner-options: ['verifier-failure', 'verifier-config']
849        isa:
850          instructions:
851            - sig: return.obj
852              acc: in:ref
853              format: [op_none]
854        header-template: []
855        code-template: |
856          .record panda.Object <external>
857          .record R {}
858          .function %s func() {
859              return.obj
860          }
861
862          .function i32 main() {
863              call.short func
864        check-type: exit-positive
865        description: Check that verifier reports an error if accumulator is not initialized in Pandasm context with static call.
866        cases:
867          - values:
868            - panda.Object
869          - values:
870            - R
871
872      - file-name: "uninitialized_acc_s_j"
873        tags: [verifier]
874        runner-options: ['verifier-failure', 'verifier-config', 'use-pa']
875        isa:
876          instructions:
877            - sig: return.obj
878              acc: in:ref
879              format: [op_none]
880        header-template: [PandaAssembly]
881        code-template: |
882          .record panda.Object <external>
883          .record R {}
884          .function %s func() {
885              return.obj
886          }
887
888          .function i32 main() {
889              call.short func
890        check-type: exit-positive
891        description: Check that verifier reports an error if accumulator is not initialized in PandaAssembly context with static call.
892        cases:
893          - values:
894            - panda.Object
895          - values:
896            - R
897
898      - file-name: "uninitialized_acc_v_p"
899        tags: [verifier]
900        runner-options: ['verifier-failure', 'verifier-config']
901        isa:
902          instructions:
903            - sig: return.obj
904              acc: in:ref
905              format: [op_none]
906        header-template: []
907        code-template: |
908          .record panda.Object <external>
909          .record R {}
910          .function %s R.func(R a0) {
911              return.obj
912          }
913
914          .function i32 main() {
915              newobj v10, R
916              call.virt.short R.func, v10
917        check-type: exit-positive
918        description: Check that verifier reports an error if accumulator is not initialized in Pandasm context with virtual call.
919        cases:
920          - values:
921            - panda.Object
922          - values:
923            - R
924
925      - file-name: "uninitialized_acc_s_j"
926        tags: [verifier]
927        runner-options: ['verifier-failure', 'verifier-config', 'use-pa']
928        isa:
929          instructions:
930            - sig: return.obj
931              acc: in:ref
932              format: [op_none]
933        header-template: [PandaAssembly]
934        code-template: |
935          .record panda.Object <external>
936          .record R {}
937          .function %s R.func(R a0) {
938              return.obj
939          }
940
941          .function i32 main() {
942              newobj v10, R
943              call.virt.short R.func, v10
944        check-type: exit-positive
945        description: Check that verifier reports an error if accumulator is not initialized in PandaAssembly context with virtual call.
946        cases:
947          - values:
948            - panda.Object
949          - values:
950            - R
951