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