• 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: PandaAssembly
16    template: |
17      .language PandaAssembly
18  - name: aoobe_p
19    template: |
20      .record panda.ArrayIndexOutOfBoundsException <external>
21      .record R {}
22      .function void R.ctor(R a0) <ctor> {
23          return.void
24      }
25  - name: aoobe_j
26    template: |
27      .record panda.ArrayIndexOutOfBoundsException <external>
28      .record panda.String <external>
29      .record R {}
30      .function void R.ctor(R a0) <ctor> {
31          return.void
32      }
33  - name: npe_p
34    template: |
35      .record panda.NullPointerException <external>
36  - name: npe_j
37    template: |
38      .record panda.NullPointerException <external>
39  - name: ase_p
40    template: |
41      .record panda.ArrayStoreException <external>
42  - name: ase_j
43    template: |
44      .record panda.ArrayStoreException <external>
45
46tests:
47  - file-name: "starr.obj"
48    isa:
49      title: Store to array
50      description: >
51        Store accumulator content into array slot pointed by index.
52      instructions:
53        - sig: starr.obj v1:in:ref[], v2:in:i32
54          acc: in:ref
55          format: [op_v1_4_v2_4]
56    commands:
57
58
59      - file-name: "reg_valid"
60        isa:
61          instructions:
62            - sig: starr.obj v1:in:ref[], v2:in:i32
63              acc: in:ref
64              format: [op_v1_4_v2_4]
65        check-type: empty
66        runner-options: [compile-only]
67        description: Check 'starr.obj' instruction with valid register numbers.
68        header-template: []
69        code-template: |
70          #
71          .function i32 main() {
72              starr.obj %s, %s
73              ldai 0
74              return
75          }
76        cases:
77          - values: [v0, v15]
78          - values: [v15, v0]
79          - values: [v15, v15]
80          - case-template: |
81              #
82              .record A {}
83              .function i32 f1(A[] a0, i32 a1) {
84                  starr.obj a0, a1   # valid registers
85                  ldai 0
86                  return
87              }
88
89              .function i32 main() {
90                  call.short f1, v1, v2
91                  return
92              }
93
94
95      - file-name: "reg_v_invalid"
96        isa:
97          instructions:
98            - sig: starr.obj v1:in:ref[], v2:in:i32
99              acc: in:ref
100              format: [op_v1_4_v2_4]
101        runner-options: [compile-failure]
102        description: Check 'starr.obj' instruction with invalid register numbers.
103        code-template: |
104          #
105              starr.obj %s, *s
106        check-type: exit-positive
107        template-cases:
108          - values: [v0]
109            exclude: [v0, v15]
110          - values: [v15]
111            exclude: [v0, v15]
112          - values: [v255]
113          - values: [v256]
114          - values: [v65536]
115          - values: [a0]
116          - values: ['V1']
117          - values: ['null']
118          - values: [0]
119        cases:
120          - values: [v0]
121            id: v0
122          - values: [v15]
123            id: v15
124          - values: [v255]
125          - values: [v256]
126          - values: [v65536]
127          - values: [a0]
128          - values: ['V1']
129          - values: ['null']
130          - values: [0]
131
132
133      - file-name: "reg_a_invalid"
134        isa:
135          instructions:
136            - sig: starr.obj v1:in:ref[], v2:in:i32
137              acc: in:ref
138              format: [op_v1_4_v2_4]
139        runner-options: [compile-failure]
140        description: Check 'starr.obj' instruction with invalid register numbers.
141        header-template: []
142        code-template: |
143              #
144              .record A {}
145              .function void f1(A[] a0, i32 a1) {
146                  starr.obj %s
147                  return.void
148              }
149
150              .function i32 main() {
151                  call.short f1, v1, v2
152        check-type: exit-positive
153        cases:
154          - values:
155            - 'a0, a2'
156          - values:
157            - 'a2, a1'
158
159
160      - file-name: null_pointer_p
161        isa:
162          exceptions:
163            - x_null
164        description: Check 'starr.obj' behavior when array is null reference.
165        header-template: [npe_p]
166        tags: ['irtoc_ignore']
167        bugid: ['3228']
168        code-template: |
169          .record A {}
170          .function void A.ctor(A a0) <ctor> {
171              return.void
172          }
173          .function A[] get_null() {
174              lda.null
175              return.obj
176          }
177          .function i32 main() {
178              call.short get_null
179              sta.obj v0
180              movi v1, %s
181              initobj A.ctor
182          begin:
183              starr.obj v0, v1
184          end:
185              ldai 1 # Should not reach this line
186              return
187
188          catch_NPE:
189              ldai 0 # Expected panda.NullPointerException
190              return
191
192          catch_all:
193              ldai 2 # Unexpected exception, test failed
194              return
195
196          .catch panda.NullPointerException, begin, end, catch_NPE
197          .catchall begin, end, catch_all
198        check-type: none
199        cases:
200          - values: [0]
201            tags: ['tsan']
202          - values: [1]
203          - values: [10]
204          - values: [128]
205          - values: [255]
206          - values: [65535]
207            tags: ['tsan']
208          - values: [0x7FFFFFFF]
209          - values: [0xFFFFFFFF]
210          - values: [0x80000000]
211
212
213      - file-name: null_pointer_j
214        isa:
215          exceptions:
216            - x_null
217        description: Check 'starr.obj' behavior when array is null reference.
218        header-template: [PandaAssembly, npe_j]
219        runner-options: [use-pa]
220        tags: ['irtoc_ignore']
221        bugid: ['3228']
222        code-template: |
223          .record panda.String <external>
224          .function panda.String[] get_null() {
225              lda.null
226              return.obj
227          }
228          .function i32 main() {
229              call.short get_null
230              sta.obj v0
231              movi v1, %s
232              lda.str "test"
233          begin:
234              starr.obj v0, v1
235          end:
236              ldai 1 # Should not reach this line
237              return
238
239          catch_NPE:
240              ldai 0 # Expected panda.NullPointerException
241              return
242
243          catch_all:
244              ldai 2 # Unexpected exception, test failed
245              return
246
247          .catch panda.NullPointerException, begin, end, catch_NPE
248          .catchall begin, end, catch_all
249        check-type: none
250        cases:
251          - values: [0]
252            tags: ['tsan']
253          - values: [1]
254          - values: [10]
255          - values: [128]
256          - values: [255]
257          - values: [65535]
258            tags: ['tsan']
259          - values: [0x7FFFFFFF]
260          - values: [0xFFFFFFFF]
261          - values: [0x80000000]
262
263
264      - file-name: array_out_of_bounds_exception_p
265        isa:
266          exceptions:
267            - x_bounds
268        description: Check 'starr.obj' behavior when index is out of array bounds.
269        header-template: [aoobe_p, main]
270        tags: ['irtoc_ignore']
271        code-template: |
272          #
273              movi v0, *s
274              newarr v1, v0, %s
275              movi v2, *s
276              %s
277          begin:
278              starr.obj v1, v2
279          end:
280              ldai 1 # Should not reach this line
281              return
282
283          catch_AOOBE:
284              ldai 0 # Expected panda.ArrayIndexOutOfBoundsException
285              return
286
287          catch_all:
288              ldai 2 # Unexpected exception, test failed
289              return
290
291          .catch panda.ArrayIndexOutOfBoundsException, begin, end, catch_AOOBE
292          .catchall begin, end, catch_all
293        check-type: none
294        template-cases:
295            - values:
296              - 'R[]'
297              - initobj R.ctor
298            - values:
299              - 'R[][][]'
300              - |
301                #
302                    movi v0, 1
303                    newarr v0, v0, R[][]
304                    lda.obj v0
305        cases:
306          - values: [0, 0]
307            tags: ['tsan']
308          - values: [0, 1]
309          - values: [10, -10]
310          - values: [10, 128]
311          - values: [255, 255]
312          - values: [254, 255]
313          - values: [65535, 65535]
314            tags: ['tsan']
315          - values: [65535, 65536]
316          - values: [10, 0xFFFFFFFF]
317          - values: [256, 0xFFFFFFFE]
318          - values: [65536, 0xFFFFFFFD]
319            tags: ['tsan']
320          - values: [0x100000, 0xFFFFFFFC]
321          - values: [10, 0x80000000]
322          - values: [256, 0x80000001]
323          - values: [65536, 0x80000002]
324            tags: ['tsan']
325          - values: [0x100000, 0x80000003]
326
327
328      - file-name: array_out_of_bounds_exception_j
329        isa:
330          exceptions:
331            - x_bounds
332        description: Check 'starr.obj' behavior when index is out of array bounds.
333        runner-options: [use-pa]
334        tags: ['irtoc_ignore']
335        header-template: [PandaAssembly, aoobe_j, main]
336        bugid: ['3227']
337        code-template: |
338          #
339              movi v0, *s
340              newarr v1, v0, %s
341              movi v2, *s
342              %s
343          begin:
344              starr.obj v1, v2
345          end:
346              ldai 1 # Should not reach this line
347              return
348
349          catch_AOOBE:
350              ldai 0 # Expected panda.ArrayIndexOutOfBoundsException
351              return
352
353          catch_all:
354              ldai 2 # Unexpected exception, test failed
355              return
356
357          .catch panda.ArrayIndexOutOfBoundsException, begin, end, catch_AOOBE
358          .catchall begin, end, catch_all
359        check-type: none
360        template-cases:
361            - values:
362              - 'R[]'
363              - initobj R.ctor
364            - values:
365              - 'panda.String[][][]'
366              - |
367                #
368                    movi v0, 1
369                    newarr v0, v0, panda.String[][]
370                    lda.obj v0
371        cases:
372          - values: [0, 0]
373            tags: ['tsan']
374          - values: [0, 1]
375          - values: [10, -10]
376          - values: [10, 128]
377          - values: [255, 255]
378          - values: [254, 255]
379          - values: [65535, 65535]
380            tags: ['tsan']
381          - values: [65535, 65536]
382          - values: [10, 0xFFFFFFFF]
383          - values: [256, 0xFFFFFFFE]
384          - values: [65536, 0xFFFFFFFD]
385            tags: ['tsan']
386          - values: [0x100000, 0xFFFFFFFC]
387          - values: [10, 0x80000000]
388          - values: [256, 0x80000001]
389          - values: [65536, 0x80000002]
390            tags: ['tsan']
391          - values: [0x100000, 0x80000003]
392
393
394      - file-name: ase_p
395        isa:
396          exceptions:
397            - x_store
398        description: Check 'starr.obj' behavior when element isn't an instance of array's element type
399        bugid: ['3362']
400        header-template: [ase_p]
401        tags: ['irtoc_ignore']
402        code-template: |
403          .record panda.Object <external>
404          .record panda.String <external>
405          .record panda.Class <external>
406          .record A {}
407          .record B {}
408          .function void A.ctor(A a0) <ctor> {
409              return.void
410          }
411          .function void B.ctor(B a0) <ctor> {
412              return.void
413          }
414          .function panda.Object getObj() {
415              %s
416              return.obj
417          }
418          .function i32 main() {
419              movi v0, 1
420              newarr v1, v0, *s
421              movi v2, 0
422              call.short getObj
423          begin:
424              starr.obj v1, v2
425          end:
426              ldai 1 # Should not reach this line
427              return
428
429          catch_ASE:
430              ldai 0 # Expected panda.ArrayStoreException
431              return
432
433          catch_all:
434              ldai 2 # Unexpected exception, test failed
435              return
436
437          .catch panda.ArrayStoreException, begin, end, catch_ASE
438          .catchall begin, end, catch_all
439        check-type: none
440        template-cases:
441          - values:
442            - initobj A.ctor
443            exclude: [a]
444          - values:
445            - initobj B.ctor
446            exclude: [b]
447          - values:
448            - lda.str "test string"
449            exclude: [string]
450          - values:
451            - lda.type B
452            exclude: [class]
453          - values:
454            - |
455              #
456                  movi v0, 1
457                  newarr v0, v0, A[]
458                  lda.obj v0
459            exclude: [a_array]
460          - values:
461            - |
462              #
463                  movi v0, 1
464                  newarr v0, v0, B[]
465                  lda.obj v0
466            exclude: [b_array]
467          - values:
468            - |
469              #
470                  movi v0, 1
471                  newarr v0, v0, panda.String[]
472                  lda.obj v0
473            exclude: [string_array]
474          - values:
475            - |
476              #
477                  movi v0, 1
478                  newarr v0, v0, panda.Object[]
479                  lda.obj v0
480        cases:
481          - values:
482            - A[]
483            id: a
484          - values:
485            - B[]
486            id: b
487          - values:
488            - panda.String[]
489            id: string
490            tags: ['tsan']
491          - values:
492            - panda.Class[]
493            id: class
494          - values:
495            - A[][]
496            id: a_array
497          - values:
498            - B[][]
499            id: b_array
500          - values:
501            - panda.String[][]
502            id: string_array
503          - values:
504            - panda.Class[][]
505            id: class_array
506            tags: ['tsan']
507
508
509      - file-name: ase_j
510        isa:
511          exceptions:
512            - x_store
513        description: Check 'starr.obj' behavior when element isn't an instance of array's element type
514        runner-options: [use-pa]
515        bugid: ['3362']
516        header-template: [PandaAssembly, ase_j]
517        tags: ['irtoc_ignore']
518        code-template: |
519          .record R {}
520          .record I <panda.interface> {}
521          .record Q <panda.implements=I> {}
522          .record E <panda.extends=Q> {}
523          .record A <panda.annotation, panda.annotation.type=runtime> {}
524          .record panda.Object <external>
525          .record panda.String <external>
526          .record panda.Class <external>
527
528          .function void R.ctor(R a0) <ctor> {
529              return.void
530          }
531          .function void Q.ctor(Q a0) <ctor> {
532              return.void
533          }
534          .function void E.ctor(E a0) <ctor> {
535              return.void
536          }
537          .function panda.Object getObj() {
538              %s
539              return.obj
540          }
541          .function i32 main() {
542              movi v0, 1
543              newarr v1, v0, *s
544              movi v2, 0
545              call.short getObj
546          begin:
547              starr.obj v1, v2
548          end:
549              ldai 1 # Should not reach this line
550              return
551
552          catch_ASE:
553              ldai 0 # Expected panda.ArrayStoreException
554              return
555
556          catch_all:
557              ldai 2 # Unexpected exception, test failed
558              return
559
560          .catch panda.ArrayStoreException, begin, end, catch_ASE
561          .catchall begin, end, catch_all
562        check-type: none
563        template-cases:
564          - values:
565            - initobj R.ctor
566            exclude: [r]
567          - values:
568            - initobj Q.ctor
569            exclude: [i, q]
570          - values:
571            - initobj E.ctor
572            exclude: [i, q, e]
573          - values:
574            - lda.str "test string"
575            exclude: [string]
576          - values:
577            - lda.type R
578            exclude: [class]
579          - values:
580            - |
581              #
582                  movi v0, 1
583                  newarr v0, v0, R[]
584                  lda.obj v0
585            exclude: [r_array]
586          - values:
587            - |
588              #
589                  movi v0, 1
590                  newarr v0, v0, I[]
591                  lda.obj v0
592            exclude: [i_array]
593          - values:
594            - |
595              #
596                  movi v0, 1
597                  newarr v0, v0, Q[]
598                  lda.obj v0
599            exclude: [q_array, i_array]
600          - values:
601            - |
602              #
603                  movi v0, 1
604                  newarr v0, v0, E[]
605                  lda.obj v0
606            exclude: [q_array, i_array, e_array]
607          - values:
608            - |
609              #
610                  movi v0, 1
611                  newarr v0, v0, A[]
612                  lda.obj v0
613            exclude: [a_array]
614          - values:
615            - |
616              #
617                  movi v0, 1
618                  newarr v0, v0, panda.String[]
619                  lda.obj v0
620            exclude: [string_array]
621          - values:
622            - |
623              #
624                  movi v0, 1
625                  newarr v0, v0, panda.Class[]
626                  lda.obj v0
627            exclude: [class_array]
628          - values:
629            - |
630              #
631                  movi v0, 1
632                  newarr v0, v0, panda.Object[]
633                  lda.obj v0
634        cases:
635          - values:
636            - R[]
637            id: r
638          - values:
639            - I[]
640            id: i
641          - values:
642            - Q[]
643            id: q
644          - values:
645            - E[]
646            id: e
647            tags: ['tsan']
648          - values:
649            - A[]
650          - values:
651            - panda.String[]
652            id: string
653          - values:
654            - panda.Class[]
655            id: class
656          - values:
657            - R[][]
658            id: r_array
659          - values:
660            - I[][]
661            id: i_array
662          - values:
663            - Q[][]
664            id: q_array
665          - values:
666            - E[][]
667            id: e_array
668          - values:
669            - A[][]
670            id: a_array
671          - values:
672            - panda.String[][]
673            id: string_array
674            tags: ['tsan']
675          - values:
676            - panda.Class[][]
677            id: class_array
678
679
680      - file-name: uninitialized_regs
681        isa:
682          verification:
683            - v1_array_type
684            - v2_i32
685            - acc_type
686        description: Check 'starr.obj' with uninitialized register
687        tags: ['verifier']
688        runner-options: ['verifier-failure', 'verifier-config']
689        header-template: []
690        code-template: |
691            #
692            .record R {}
693            .function i32 main() {
694                %s
695                starr.obj v1, v2
696        check-type: exit-positive
697        cases:
698          - values:
699              - |
700                # acc is not initialized
701                    movi v0, 10
702                    newarr v1, v0, R[]
703                    movi v2, 0
704          - values:
705              - |
706                # v1 is not initialized
707                    movi v2, 0
708                    lda.null
709          - values:
710              - |
711                # v2 is not initialized
712                    movi v0, 10
713                    newarr v1, v0, R[]
714                    lda.null
715          - values:
716              - |
717                # all regs are not initialized
718
719
720      - file-name: "acceptable_types_p"
721        isa:
722          verification:
723            - v1_array_type
724        description: Check acceptable array types for starr.obj instruction in Panda Assembly context.
725        runner-options: ['verifier-only', 'verifier-config']
726        tags: ['verifier']
727        header-template: []
728        code-template: |
729          .record R {}
730          .record panda.Object <external>
731          .record panda.String <external>
732          .record panda.Class <external>
733          .function i32 main() {
734              movi v0, 1
735              newarr v1, v0, %s
736              movi v2, 0
737              lda.null
738              starr.obj v1, v2
739        check-type: exit-positive
740        cases:
741          - values: ['panda.Object[]']
742          - values: ['panda.String[]']
743          - values: ['panda.Class[]']
744          - values: ['R[]']
745          - values: ['panda.Object[][]']
746          - values: ['panda.String[][]']
747          - values: ['panda.Class[][]']
748          - values: ['R[][]']
749          - values: ['u1[][]']
750          - values: ['u32[][]']
751          - values: ['u64[][]']
752
753
754      - file-name: "acceptable_types_j"
755        isa:
756          verification:
757            - v1_array_type
758        description: Check acceptable array types for starr.obj instruction in PandaAssembly context.
759        runner-options: [verifier-only, use-pa, verifier-config]
760        tags: [verifier, pa-verifier]
761        bugid: ['3227']
762        header-template: [PandaAssembly]
763        code-template: |
764          .record R {}
765          .record I <panda.interface> {}
766          .record Q <panda.implements=I> {}
767          .record E <panda.extends=Q> {}
768          .record A <panda.annotation, panda.annotation.type=runtime> {}
769          .record panda.Object <external>
770          .record panda.String <external>
771          .record panda.Class <external>
772          .function i32 main() {
773              movi v0, 1
774              newarr v1, v0, %s
775              movi v2, 0
776              lda.null
777              starr.obj v1, v2
778        check-type: exit-positive
779        cases:
780          - values: ['R[]']
781          - values: ['I[]']
782          - values: ['Q[]']
783          - values: ['E[]']
784          - values: ['A[]']
785          - values: ['panda.Object[]']
786          - values: ['panda.String[]']
787          - values: ['panda.Class[]']
788          - values: ['R[][]']
789          - values: ['I[][]']
790          - values: ['Q[][]']
791          - values: ['E[][]']
792          - values: ['A[][]']
793          - values: ['panda.Object[][]']
794          - values: ['panda.String[][]']
795          - values: ['panda.Class[][]']
796          - values: ['i8[][]']
797          - values: ['i32[][]']
798          - values: ['f64[][]']
799
800
801      - file-name: "rejectable_primitive_types_p"
802        isa:
803          verification:
804            - v1_array_type
805        description: Check rejectable array of primitive types for starr.obj instruction in Panda Assembly context.
806        runner-options: ['verifier-failure', 'verifier-config']
807        tags: ['verifier']
808        header-template: [main]
809        code-template: |
810          #
811              movi v0, 1
812              newarr v1, v0, %s
813              movi v2, 0
814              lda.null
815              starr.obj v1, v2
816        check-type: exit-positive
817        cases:
818          - values: ['u1[]']
819          - values: ['i8[]']
820          - values: ['u8[]']
821          - values: ['i16[]']
822          - values: ['u16[]']
823          - values: ['i32[]']
824          - values: ['u32[]']
825          - values: ['i64[]']
826          - values: ['u64[]']
827          - values: ['f32[]']
828          - values: ['f64[]']
829
830
831      - file-name: "rejectable_primitive_types_j"
832        isa:
833          verification:
834            - v1_array_type
835        description: Check rejectable array of primitive types for starr.obj instruction in PandaAssembly context.
836        runner-options: [verifier-failure, use-pa, verifier-config]
837        tags: [verifier, pa-verifier]
838        bugid: ['3293', '5271']
839        header-template: [PandaAssembly, main]
840        code-template: |
841          #
842              movi v0, 1
843              newarr v1, v0, %s
844              movi v2, 0
845              lda.null
846              starr.obj v1, v2
847        check-type: exit-positive
848        cases:
849          - values: ['u1[]']
850          - values: ['i8[]']
851          - values: ['u8[]']
852          - values: ['i16[]']
853          - values: ['u16[]']
854          - values: ['i32[]']
855          - values: ['u32[]']
856          - values: ['i64[]']
857          - values: ['u64[]']
858          - values: ['f32[]']
859          - values: ['f64[]']
860
861
862      - file-name: "arr_type_p"
863        isa:
864          verification:
865            - v1_array_type
866        description: Check 'starr.obj' with incorrect array type in Panda Assembly context. See also "rejectable_primitive_types" tests.
867        runner-options: ['verifier-failure', 'verifier-config']
868        tags: ['verifier']
869        header-template: []
870        code-template: |
871          #
872          .record A {}
873          .function void A.ctor(A a0) <ctor> {
874              return.void
875          }
876          .record panda.String <external>
877          .record panda.Object <external>
878          .function i32 main() {
879              %s
880              movi v1, 0
881              lda.null
882              starr.obj v0, v1
883        check-type: exit-positive
884        cases:
885          - values:
886              - movi v0, 0
887          - values:
888              - movi.64 v0, 0
889          - values:
890              - fmovi v0, 0
891          - values:
892              - fmovi.64 v0, 0
893          - values:
894              - |
895                #
896                    initobj A.ctor
897                    sta.obj v0
898          - values:
899              - |
900                #
901                    lda.type A
902                    sta.obj v0
903          - values:
904              - |
905                #
906                    lda.type A[]
907                    sta.obj v0
908          - values:
909              - |
910                #
911                    lda.type panda.String
912                    sta.obj v0
913          - values:
914              - |
915                #
916                    lda.type panda.String[]
917                    sta.obj v0
918          - values:
919              - |
920                #
921                    lda.type panda.Object
922                    sta.obj v0
923          - values:
924              - |
925                #
926                    lda.type panda.Object[]
927                    sta.obj v0
928          - values:
929              - |
930                #
931                    lda.str "string"
932                    sta.obj v0
933
934
935      - file-name: "arr_type_j"
936        isa:
937          verification:
938            - v1_array_type
939        description: Check 'starr.obj' with incorrect array type in PandaAssembly context. See also "rejectable_primitive_types" tests.
940        runner-options: [verifier-failure, use-pa, verifier-config]
941        tags: [verifier, pa-verifier]
942        bugid: ['3293', '5271']
943        header-template: [PandaAssembly]
944        code-template: |
945          #
946          .record A {}
947          .function void A.ctor(A a0) <ctor> {
948              return.void
949          }
950          .record panda.Object <external>
951          .function void panda.Object.ctor(panda.Object a0) <external,ctor>
952          .function i32 main() {
953              %s
954              movi v1, 0
955              lda.null
956              starr.obj v0, v1
957        check-type: exit-positive
958        cases:
959          - values:
960              - movi v0, 0
961          - values:
962              - movi.64 v0, 0
963          - values:
964              - fmovi v0, 0
965          - values:
966              - fmovi.64 v0, 0
967          - values:
968              - |
969                #
970                    initobj A.ctor
971                    sta.obj v0
972          - values:
973              - |
974                #
975                    initobj panda.Object.ctor
976                    sta.obj v0
977          - values:
978              - |
979                #
980                    lda.type A
981                    sta.obj v0
982          - values:
983              - |
984                #
985                    lda.type A[]
986                    sta.obj v0
987          - values:
988              - |
989                #
990                    lda.type panda.Object
991                    sta.obj v0
992          - values:
993              - |
994                #
995                    lda.type panda.Object[]
996                    sta.obj v0
997          - values:
998              - |
999                #
1000                    lda.str "string"
1001                    sta.obj v0
1002
1003
1004      - file-name: "index_type_p"
1005        isa:
1006          verification:
1007            - v2_i32
1008        description: Check 'starr.obj' with incorrect array index type in Panda Assembly context.
1009        runner-options: ['verifier-failure', 'verifier-config']
1010        tags: ['verifier']
1011        header-template: []
1012        code-template: |
1013          #
1014          .record A {}
1015          .function void A.ctor(A a0) <ctor> {
1016              return.void
1017          }
1018          .record panda.String <external>
1019          .record panda.Object <external>
1020          .function i32 main() {
1021              movi v0, 1
1022              newarr v1, v0, *s
1023              %s
1024              *s
1025              starr.obj v1, v2
1026        check-type: exit-positive
1027        cases:
1028          - values:
1029              - A[]
1030              - initobj A.ctor
1031          - values:
1032              - panda.String[]
1033              - lda.str "test string"
1034        template-cases:
1035          - values:
1036              - mov.null v2
1037          - values:
1038              - movi.64 v2, 0
1039          - values:
1040              - fmovi v2, 0
1041          - values:
1042              - fmovi.64 v2, 0
1043          - values:
1044              - |
1045                #
1046                    initobj A.ctor
1047                    sta.obj v1
1048          - values:
1049              - |
1050                #
1051                    movi v0, 1
1052                    newarr v2, v0, A[]
1053          - values:
1054              - |
1055                #
1056                    lda.type A
1057                    sta.obj v2
1058          - values:
1059              - |
1060                #
1061                    lda.type A[]
1062                    sta.obj v2
1063          - values:
1064              - |
1065                #
1066                    lda.type panda.String
1067                    sta.obj v2
1068          - values:
1069              - |
1070                #
1071                    lda.type panda.String[]
1072                    sta.obj v2
1073          - values:
1074              - |
1075                #
1076                    lda.type panda.Object
1077                    sta.obj v2
1078          - values:
1079              - |
1080                #
1081                    lda.type panda.Object[]
1082                    sta.obj v2
1083          - values:
1084              - |
1085                #
1086                    lda.str "string"
1087                    sta.obj v2
1088          - values:
1089              - |
1090                #
1091                    movi v0, 1
1092                    newarr v2, v0, panda.Object[]
1093          - values:
1094              - |
1095                #
1096                    movi v0, 1
1097                    newarr v2, v0, panda.String[]
1098
1099
1100      - file-name: "index_type_j"
1101        isa:
1102          verification:
1103            - v2_i32
1104        description: Check 'starr.obj' with incorrect array index type in PandaAssembly context.
1105        runner-options: [verifier-failure, use-pa, verifier-config]
1106        tags: [verifier, pa-verifier]
1107        bugid: ['3293', '5271']
1108        header-template: [PandaAssembly]
1109        code-template: |
1110          #
1111          .record A {}
1112          .function void A.ctor(A a0) <ctor> {
1113              return.void
1114          }
1115          .record panda.Object <external>
1116          .function void panda.Object.ctor(panda.Object a0) <external,ctor>
1117          .function i32 main() {
1118              movi v0, 1
1119              newarr v1, v0, *s
1120              %s
1121              *s
1122              starr.obj v1, v2
1123        check-type: exit-positive
1124        cases:
1125          - values:
1126              - A[]
1127              - initobj A.ctor
1128          - values:
1129              - panda.Object[]
1130              - initobj panda.Object.ctor
1131        template-cases:
1132          - values:
1133              - mov.null v2
1134          - values:
1135              - movi.64 v2, 0
1136          - values:
1137              - fmovi v2, 0
1138          - values:
1139              - fmovi.64 v2, 0
1140          - values:
1141              - |
1142                #
1143                    initobj A.ctor
1144                    sta.obj v2
1145          - values:
1146              - |
1147                #
1148                    movi v0, 1
1149                    newarr v2, v0, A[]
1150          - values:
1151              - |
1152                #
1153                    initobj panda.Object.ctor
1154                    sta.obj v2
1155          - values:
1156              - |
1157                #
1158                    movi v0, 1
1159                    newarr v2, v0, panda.Object[]
1160          - values:
1161              - |
1162                #
1163                    lda.type A
1164                    sta.obj v2
1165          - values:
1166              - |
1167                #
1168                    lda.type A[]
1169                    sta.obj v2
1170          - values:
1171              - |
1172                #
1173                    lda.type panda.Object
1174                    sta.obj v2
1175          - values:
1176              - |
1177                #
1178                    lda.type panda.Object[]
1179                    sta.obj v2
1180          - values:
1181              - |
1182                #
1183                    lda.str "string"
1184                    sta.obj v2
1185
1186
1187      - file-name: "acc_incorrect_type_p"
1188        isa:
1189          verification:
1190            - acc_type
1191        description: Check 'starr.obj' with incorrect accumulator type in Panda Assembly context.
1192        runner-options: ['verifier-failure', 'verifier-config']
1193        tags: ['verifier']
1194        header-template: []
1195        code-template: |
1196          #
1197          .record A {}
1198          .function void A.ctor(A a0) <ctor> {
1199              return.void
1200          }
1201          .record panda.String <external>
1202          .record panda.Object <external>
1203          .function i32 main() {
1204              movi v0, 1
1205              newarr v1, v0, *s
1206              movi v2, 0
1207              %s
1208              starr.obj v1, v2
1209        check-type: exit-positive
1210        cases:
1211          - values: ['A[]']
1212          - values: ['panda.Object[]']
1213        template-cases:
1214          - values:
1215              - ldai 0
1216          - values:
1217              - ldai.64 0
1218          - values:
1219              - fldai 0
1220          - values:
1221              - fldai.64 0
1222
1223
1224      - file-name: "acc_correct_type_p"
1225        isa:
1226          verification:
1227            - acc_type
1228        description: Check 'starr.obj' with correct accumulator type in Panda Assembly context.
1229        runner-options: ['verifier-only', 'verifier-config']
1230        tags: ['verifier']
1231        header-template: []
1232        code-template: |
1233          #
1234          .record Z {}
1235          .record A {}
1236          .function void A.ctor(A a0) <ctor> {
1237              return.void
1238          }
1239          .record panda.Object <external>
1240          .function panda.Object getObj() {
1241              %s
1242              return.obj
1243          }
1244          .function i32 main() {
1245              movi v0, 1
1246              newarr v1, v0, %s
1247              movi v2, 0
1248              call.short getObj
1249              starr.obj v1, v2
1250        check-type: exit-positive
1251        cases:
1252          - values:
1253            - initobj A.ctor
1254            - A[]
1255            bugid: ['7423']
1256            ignore: true
1257          - values:
1258            - initobj A.ctor
1259            - panda.Object[]
1260          - values:
1261            - |
1262              #
1263                  newobj v3, Z
1264                  lda.obj v3
1265            - A[]
1266            runner-options: [verifier-failure, verifier-config]
1267
1268
1269      - file-name: "acc_incorrect_type_j"
1270        isa:
1271          verification:
1272            - acc_type
1273        description: Check 'starr.obj' with incorrect accumulator type in PandaAssembly context.
1274        runner-options: [verifier-failure, use-pa, verifier-config]
1275        tags: [verifier, pa-verifier]
1276        bugid: ['3293', '5271']
1277        header-template: [PandaAssembly]
1278        code-template: |
1279          #
1280          .record A {}
1281          .function void A.ctor(A a0) <ctor> {
1282              return.void
1283          }
1284          .record panda.Object <external>
1285          .function void panda.Object.ctor(panda.Object a0) <external,ctor>
1286          .function i32 main() {
1287              movi v0, 1
1288              newarr v1, v0, *s
1289              movi v2, 0
1290              %s
1291              starr.obj v1, v2
1292        check-type: exit-positive
1293        cases:
1294          - values: ['A[]']
1295          - values: ['panda.Object[]']
1296        template-cases:
1297          - values:
1298              - ldai 0
1299          - values:
1300              - ldai.64 0
1301          - values:
1302              - fldai 0
1303          - values:
1304              - fldai.64 0
1305
1306
1307      - file-name: "acc_correct_type_j"
1308        isa:
1309          verification:
1310            - acc_type
1311        description: Check 'starr.obj' with correct accumulator type in PandaAssembly context.
1312        runner-options: [verifier-only, use-pa, verifier-config]
1313        tags: [verifier, pa-verifier]
1314        bugid: ['3293', '5271']
1315        header-template: [PandaAssembly]
1316        code-template: |
1317          #
1318          .record Z {}
1319          .record A {}
1320          .function void A.ctor(A a0) <ctor> {
1321              return.void
1322          }
1323          .record panda.Object <external>
1324          .function panda.Object getObj() {
1325              %s
1326              return.obj
1327          }
1328          .function i32 main() {
1329              movi v0, 1
1330              newarr v1, v0, %s
1331              movi v2, 0
1332              call.short getObj
1333              starr.obj v1, v2
1334        check-type: exit-positive
1335        cases:
1336          - values:
1337            - initobj A.ctor
1338            - A[]
1339            bugid: ['7423']
1340            ignore: true
1341          - values:
1342            - initobj A.ctor
1343            - panda.Object[]
1344          - values:
1345            - |
1346              #
1347                  newobj v3, Z
1348                  lda.obj v3
1349            - A[]
1350            runner-options: [verifier-failure, use-pa, verifier-config]
1351
1352
1353      - file-name: "mult_regs_types_p"
1354        isa:
1355          verification:
1356            - v1_array_type
1357            - v2_i32
1358            - acc_type
1359        description: Check 'starr.obj' with multiple incorrect register types in Panda Assembly context.
1360        runner-options: ['verifier-failure', 'verifier-config']
1361        tags: ['verifier']
1362        header-template: []
1363        code-template: |
1364          #
1365          .record A {}
1366          .function void A.ctor(A a0) <ctor> {
1367              return.void
1368          }
1369          .record panda.String <external>
1370          .record panda.Object <external>
1371          .function void panda.Object.ctor(panda.Object a0) <external,ctor>
1372          .function i32 main() {
1373              %s
1374              starr.obj v1, v2
1375        check-type: exit-positive
1376        cases:
1377          - values:
1378              - |
1379                # all registers invalid
1380                    initobj panda.Object.ctor
1381                    sta.obj v1
1382                    movi.64 v2, 0
1383                    ldai 0
1384          - values:
1385              - |
1386                # v1 and v2 invalid
1387                    lda.str "test string"
1388                    sta.obj v1
1389                    fmovi.64 v2, 1
1390                    initobj panda.Object.ctor
1391          - values:
1392              - |
1393                # v1 and acc invalid
1394                    lda.type panda.Object
1395                    sta.obj v1
1396                    movi v2, 0
1397                    fldai.64 0
1398          - values:
1399              - |
1400                # v2 and acc invalid
1401                    movi v0, 1
1402                    newarr v1, v0, A[]
1403                    sta.obj v2
1404                    ldai 0
1405
1406
1407      - file-name: "mult_regs_types_j"
1408        isa:
1409          verification:
1410            - v1_array_type
1411            - v2_i32
1412            - acc_type
1413        description: Check 'starr.obj' with multiple incorrect register types in PandaAssembly context.
1414        runner-options: [verifier-failure, use-pa, verifier-config]
1415        tags: [verifier, pa-verifier]
1416        bugid: ['3293', '5271']
1417        header-template: [PandaAssembly]
1418        code-template: |
1419          #
1420          .record A {}
1421          .function void A.ctor(A a0) <ctor> {
1422              return.void
1423          }
1424          .record panda.Object <external>
1425          .function void panda.Object.ctor(panda.Object a0) <external,ctor>
1426          .function i32 main() {
1427              %s
1428              starr.obj v1, v2
1429        check-type: exit-positive
1430        cases:
1431          - values:
1432              - |
1433                # all registers invalid
1434                    initobj panda.Object.ctor
1435                    sta.obj v1
1436                    movi.64 v2, 0
1437                    ldai 0
1438          - values:
1439              - |
1440                # v1 and v2 invalid
1441                    lda.str "test string"
1442                    sta.obj v1
1443                    fmovi.64 v2, 1
1444                    initobj panda.Object.ctor
1445          - values:
1446              - |
1447                # v1 and acc invalid
1448                    lda.type panda.Object
1449                    sta.obj v1
1450                    movi v2, 0
1451                    fldai.64 0
1452          - values:
1453              - |
1454                # v2 and acc invalid
1455                    movi v0, 1
1456                    newarr v1, v0, A[]
1457                    sta.obj v2
1458                    ldai 0
1459
1460
1461      - file-name: "store_arr_p"
1462        isa:
1463          instructions:
1464            - sig: starr.obj v1:in:ref[], v2:in:i32
1465              acc: in:ref
1466              format: [op_v1_4_v2_4]
1467        description: Check starr.obj stores items to array of different size and type in Panda Assembly context.
1468        header-template: []
1469        code-template: |
1470          .record A {}
1471          .function void A.ctor(A a0) <ctor> {
1472              return.void
1473          }
1474          .record panda.String <external>
1475          .record panda.Class <external>
1476          .function i32 main() {
1477              movi v0, *s
1478              newarr v1, v0, %s
1479              movi v2, *s
1480              %s
1481              starr.obj v1, v2
1482        check-type: exit-positive
1483        template-cases:
1484          - values: ['A[]', 'initobj A.ctor']
1485          - values: ['panda.Class[]', 'lda.type A']
1486          - values: ['panda.String[]', 'lda.str "test string"']
1487        cases:
1488          - values: ['1', '0']
1489          - values: ['255', '254']
1490            tags: ['tsan']
1491          - values: ['65536', '65535']
1492
1493
1494      - file-name: "store_arr_j"
1495        isa:
1496          instructions:
1497            - sig: starr.obj v1:in:ref[], v2:in:i32
1498              acc: in:ref
1499              format: [op_v1_4_v2_4]
1500        description: Check starr.obj stores items to array of different size and type in PandaAssembly context.
1501        runner-options: ['use-pa']
1502        bugid: ['3227']
1503        header-template: [PandaAssembly]
1504        code-template: |
1505          .record A {}
1506          .function void A.ctor(A a0) <ctor> {
1507              return.void
1508          }
1509          .record panda.String <external>
1510          .record panda.Object <external>
1511          .function void panda.Object.ctor(panda.Object a0) <external,ctor>
1512          .function i32 main() {
1513              movi v0, *s
1514              newarr v1, v0, %s
1515              movi v2, *s
1516              %s
1517              starr.obj v1, v2
1518        check-type: exit-positive
1519        template-cases:
1520          - values: ['A[]', 'initobj A.ctor']
1521          - values: ['panda.Object[]', 'initobj panda.Object.ctor']
1522          - values: ['panda.String[]', 'lda.str "test string"']
1523        cases:
1524          - values: ['1', '0']
1525          - values: ['255', '254']
1526          - values: ['65536', '65535']
1527            tags: ['tsan']
1528
1529
1530      - file-name: "store_all_values_p"
1531        isa:
1532          description: >
1533            Store accumulator content into array slot pointed by index.
1534        description: Check starr.obj stores correct items into array of objects.
1535        header-template: []
1536        tags: ['irtoc_ignore']
1537        check-type: exit-positive
1538        code-template: |
1539            %s
1540            .function i32 main() {
1541                movi v7, *s
1542                newarr v1, v7, A[]      # v7 is array size          # v1 - testable array
1543
1544                movi v2, 0          # v2 - index
1545            fill_array:
1546                lda v2
1547                initobj A.ctor, v2
1548                starr.obj v1, v2    # v1[v2] = acc
1549                inci v2, 1          # v2 = v2 + 1
1550                lda v2
1551                jne v7, fill_array
1552
1553                movi v2, 0          # reset index
1554            check_array:
1555                lda v2
1556                ldarr.obj v1        # acc = v1[acc]
1557                sta.obj v3          # v3 = acc
1558                call.virt.short A.cmp, v3, v2
1559                jeqz ok
1560                ldai 1
1561                return
1562            ok:
1563                inci v2, 1
1564                lda v2
1565                jne v7, check_array
1566        template-cases:
1567          - values:
1568            - |
1569              #
1570              .record A {
1571                  i32 fi32
1572              }
1573              .function void A.ctor(A a0, i32 a1) <ctor> {
1574                  lda a1
1575                  stobj a0, A.fi32
1576                  return.void
1577              }
1578              .function i32 A.cmp(A a0, i32 a1) {
1579                  ldobj a0, A.fi32
1580                  jne a1, exit_failure
1581                  ldai 0
1582                  return
1583              exit_failure: ldai 1
1584                  return
1585              }
1586            tags: ['tsan']
1587          - values:
1588            - |
1589              #
1590              .record A {
1591                  A fA
1592              }
1593              .function void A.ctor(A a0, i32 a1) <ctor> {
1594                  lda.obj a0
1595                  stobj.obj a0, A.fA
1596                  return.void
1597              }
1598              .function i32 A.cmp(A a0, i32 a1) {
1599                  ldobj.obj a0, A.fA
1600                  jeq.obj a0, ret0
1601                  ldai 1
1602                  return
1603              ret0:
1604                  ldai 0
1605                  return
1606              }
1607        cases:
1608          - values:
1609            - 10000
1610
1611
1612      - file-name: "store_all_values_j"
1613        isa:
1614          description: >
1615            Store accumulator content into array slot pointed by index.
1616        description: Check starr.obj stores correct items into array of objects.
1617        runner-options: ['use-pa']
1618        header-template: [PandaAssembly]
1619        tags: ['irtoc_ignore']
1620        check-type: exit-positive
1621        code-template: |
1622            %s
1623            .function i32 main() {
1624                movi v7, *s
1625                newarr v1, v7, %s      # v7 is array size          # v1 - testable array
1626
1627                movi v2, 0          # v2 - index
1628            fill_array:
1629                lda v2
1630                call.short create, v2
1631                starr.obj v1, v2    # v1[v2] = acc
1632                inci v2, 1          # v2 = v2 + 1
1633                lda v2
1634                jne v7, fill_array
1635
1636                movi v2, 0          # reset index
1637            check_array:
1638                lda v2
1639                ldarr.obj v1        # acc = v1[acc]
1640                sta.obj v3          # v3 = acc
1641                call.short compare, v2, v3
1642                jeqz ok
1643                ldai 1
1644                return
1645            ok:
1646                inci v2, 1
1647                lda v2
1648                jne v7, check_array
1649        template-cases:
1650          - values:
1651            - |
1652              #
1653              .record panda.Long <external>
1654              .function void panda.Long.ctor(panda.Long a0, i64 a1) <external,ctor>
1655              .function i64 panda.Long.longValue(panda.Long a0) <external>
1656              .function panda.Long create(i32 a0) <static> {
1657                  lda a0
1658                  i32toi64
1659                  sta.64 v0
1660                  initobj panda.Long.ctor, v0
1661                  return.obj
1662              }
1663              .function i32 compare(i32 a0, panda.Long a1) <static> {
1664                  call.virt.short panda.Long.longValue, a1
1665                  i64toi32
1666                  jne a0, exit_failure
1667                  ldai 0
1668                  return
1669              exit_failure: ldai 1
1670                  return
1671              }
1672            - panda.Long[]
1673            tags: ['tsan']
1674          - values:
1675            - |
1676              #
1677              .record panda.Integer <external>
1678              .function void panda.Integer.ctor(panda.Integer a0, i32 a1) <external,ctor>
1679              .function i32 panda.Integer.intValue(panda.Integer a0) <external>
1680              .function panda.Integer[] create(i32 a0) <static> {
1681                  movi v0, 1
1682                  newarr v1, v0, panda.Integer[]
1683                  initobj panda.Integer.ctor, a0
1684                  movi v2, 0
1685                  starr.obj v1, v2
1686                  lda.obj v1
1687                  return.obj
1688              }
1689              .function i32 compare(i32 a0, panda.Integer[] a1) <static> {
1690                  ldai 0
1691                  ldarr.obj a1
1692                  sta.obj v0
1693                  call.virt.short panda.Integer.intValue, v0
1694                  jne a0, exit_failure
1695                  ldai 0
1696                  return
1697              exit_failure: ldai 1
1698                  return
1699              }
1700            - panda.Integer[][]
1701            bugid: ['3348']
1702        cases:
1703          - values:
1704            - 5000
1705
1706
1707      - file-name: "store_different_type_values_p"
1708        isa:
1709          description: >
1710            Store accumulator content into array slot pointed by index.
1711        description: Check starr.obj stores correct items with various types to array of objects.
1712        header-template: []
1713        check-type: exit-positive
1714        code-template: |
1715            %s
1716            .function i32 main() {
1717                movi v7, 1
1718                newarr v1, v7, %s          # v1 - testable array
1719                movi v2, 0          # v2 - index = 0
1720
1721            check_null:
1722                lda v2
1723                ldarr.obj v1        # acc = v1[acc]
1724                jeqz.obj fill_array
1725                ldai 1
1726                return
1727
1728            fill_array:
1729                %s
1730                sta.obj v10         # v10 - saved object ref
1731                starr.obj v1, v2    # v1[v2] = acc
1732
1733            check_ref:
1734                lda v2
1735                ldarr.obj v1        # acc = v1[acc]
1736                jeq.obj v10, ok
1737                ldai 2
1738                return
1739            ok:
1740        cases:
1741          - values:
1742            - .record A {}
1743            - A[]
1744            - lda.null
1745          - values:
1746            - |
1747                  .record A {}
1748                  .function void A.ctor(A a0) <ctor> {
1749                    return.void
1750                  }
1751            - A[]
1752            - initobj A.ctor
1753            tags: ['tsan']
1754          - values:
1755            - |
1756                  .record panda.Class <external>
1757                  .record A {}
1758            - panda.Class[]
1759            - lda.type A
1760          - values:
1761            - .record panda.String <external>
1762            - panda.String[]
1763            - lda.str "test string"
1764          - values:
1765            - |
1766                  .record panda.Object <external>
1767                  .record A {}
1768                  .function void A.ctor(A a0) <ctor> {
1769                    return.void
1770                  }
1771            - panda.Object[]
1772            - initobj A.ctor
1773            tags: ['tsan']
1774          - values:
1775            - .record A {}
1776            - A[][]
1777            - |
1778              #
1779                  movi v4, 10
1780                  newarr v4, v4, A[]
1781                  lda.obj v4
1782
1783
1784      - file-name: "store_different_type_values_j"
1785        isa:
1786          description: >
1787            Store accumulator content into array slot pointed by index.
1788        description: Check starr.obj stores correct items with various types to array of objects.
1789        header-template: [PandaAssembly]
1790        runner-options: [use-pa]
1791        check-type: exit-positive
1792        code-template: |
1793            %s
1794            .function i32 main() {
1795                movi v7, 1
1796                newarr v1, v7, %s          # v1 - testable array
1797                movi v2, 0          # v2 - index = 0
1798
1799            check_null:
1800                lda v2
1801                ldarr.obj v1        # acc = v1[acc]
1802                jeqz.obj fill_array
1803                ldai 1
1804                return
1805
1806            fill_array:
1807                %s
1808                sta.obj v10         # v10 - saved object ref
1809                starr.obj v1, v2    # v1[v2] = acc
1810
1811            check_ref:
1812                lda v2
1813                ldarr.obj v1        # acc = v1[acc]
1814                jeq.obj v10, ok
1815                ldai 2
1816                return
1817            ok:
1818        cases:
1819          - values:
1820            - .record panda.Object <external>
1821            - panda.Object[]
1822            - lda.null
1823          - values:
1824            - |
1825                  .record panda.Long <external>
1826                  .function void panda.Long.ctor(panda.Long a0, i64 a1) <external,ctor>
1827            - panda.Long[]
1828            - |
1829              #
1830                  movi.64 v7, 0x7FFFFFFFFFFFFFFF
1831                  initobj panda.Long.ctor, v7
1832            tags: ['tsan']
1833          - values:
1834            - .record panda.Class <external>
1835            - panda.Class[]
1836            - lda.type panda.Class
1837          - values:
1838            - .record panda.Object <external>
1839            - panda.Object[]
1840            - lda.str "test string"
1841            tags: ['tsan']
1842          - values:
1843            - .record panda.String <external>
1844            - panda.String[][]
1845            - |
1846              #
1847                  movi v4, 10
1848                  newarr v4, v4, panda.String[]
1849                  lda.obj v4
1850            bugid: ['3348']
1851