1*e074d580SEric Astor; RUN: llvm-ml -m64 -filetype=s %s /Fo - | FileCheck %s 28fee2ee9SEric Astor 38fee2ee9SEric Astor.data 48fee2ee9SEric AstorBAZ STRUCT 58fee2ee9SEric Astor a BYTE 1 68fee2ee9SEric Astor b BYTE 2 78fee2ee9SEric AstorBAZ ENDS 88fee2ee9SEric Astor 98fee2ee9SEric AstorFOOBAR struct 2 108fee2ee9SEric Astor c BYTE 3 DUP (4) 118fee2ee9SEric Astor d DWORD 5 128fee2ee9SEric Astor e BAZ <> 138fee2ee9SEric Astor STRUCT f 148fee2ee9SEric Astor g BYTE 6 158fee2ee9SEric Astor h BYTE 7 168fee2ee9SEric Astor ends 178fee2ee9SEric Astor h BYTE "abcde" 188fee2ee9SEric Astorfoobar ENDS 198fee2ee9SEric Astor 208fee2ee9SEric Astort1 foobar <> 218fee2ee9SEric Astor 228fee2ee9SEric Astor; CHECK: t1: 238fee2ee9SEric Astor; 248fee2ee9SEric Astor; BYTE 3 DUP (4), plus alignment padding 258fee2ee9SEric Astor; CHECK-NEXT: .byte 4 268fee2ee9SEric Astor; CHECK-NEXT: .byte 4 278fee2ee9SEric Astor; CHECK-NEXT: .byte 4 288fee2ee9SEric Astor; CHECK-NEXT: .zero 1 298fee2ee9SEric Astor; 308fee2ee9SEric Astor; DWORD 5 318fee2ee9SEric Astor; CHECK-NEXT: .long 5 328fee2ee9SEric Astor; 338fee2ee9SEric Astor; BAZ <> 348fee2ee9SEric Astor; CHECK-NEXT: .byte 1 358fee2ee9SEric Astor; CHECK-NEXT: .byte 2 368fee2ee9SEric Astor; 378fee2ee9SEric Astor; <BYTE 6, BYTE 7>, with no alignment padding (field size < alignment) 388fee2ee9SEric Astor; CHECK-NEXT: .byte 6 398fee2ee9SEric Astor; CHECK-NEXT: .byte 7 408fee2ee9SEric Astor; 418fee2ee9SEric Astor; BYTE "abcde", plus alignment padding 428fee2ee9SEric Astor; CHECK-NEXT: .byte 97 438fee2ee9SEric Astor; CHECK-NEXT: .byte 98 448fee2ee9SEric Astor; CHECK-NEXT: .byte 99 458fee2ee9SEric Astor; CHECK-NEXT: .byte 100 468fee2ee9SEric Astor; CHECK-NEXT: .byte 101 478fee2ee9SEric Astor; CHECK-NEXT: .zero 1 488fee2ee9SEric Astor 498fee2ee9SEric Astort2 FOOBAR <"gh",,<10,11>,<12>,'ijk'> 508fee2ee9SEric Astor 518fee2ee9SEric Astor; CHECK: t2: 528fee2ee9SEric Astor; 538fee2ee9SEric Astor; BYTE "gh", padded with " ", plus alignment padding 548fee2ee9SEric Astor; CHECK-NEXT: .byte 103 558fee2ee9SEric Astor; CHECK-NEXT: .byte 104 568fee2ee9SEric Astor; CHECK-NEXT: .byte 32 578fee2ee9SEric Astor; CHECK-NEXT: .zero 1 588fee2ee9SEric Astor; 598fee2ee9SEric Astor; DWORD 5 (default-initialized when omitted) 608fee2ee9SEric Astor; CHECK-NEXT: .long 5 618fee2ee9SEric Astor; 628fee2ee9SEric Astor; BAZ <10, 11> 638fee2ee9SEric Astor; CHECK-NEXT: .byte 10 648fee2ee9SEric Astor; CHECK-NEXT: .byte 11 658fee2ee9SEric Astor; 668fee2ee9SEric Astor; <BYTE 12, BYTE 7>, with no alignment padding (field size < alignment) 678fee2ee9SEric Astor; CHECK-NEXT: .byte 12 688fee2ee9SEric Astor; CHECK-NEXT: .byte 7 698fee2ee9SEric Astor; 708fee2ee9SEric Astor; BYTE "ijk", padded with " ", plus alignment padding 718fee2ee9SEric Astor; CHECK-NEXT: .byte 105 728fee2ee9SEric Astor; CHECK-NEXT: .byte 106 738fee2ee9SEric Astor; CHECK-NEXT: .byte 107 748fee2ee9SEric Astor; CHECK-NEXT: .byte 32 758fee2ee9SEric Astor; CHECK-NEXT: .byte 32 768fee2ee9SEric Astor; CHECK-NEXT: .zero 1 778fee2ee9SEric Astor 788fee2ee9SEric Astor.code 798fee2ee9SEric Astor 808fee2ee9SEric Astort3: 818fee2ee9SEric Astormov al, t2.f.h 828fee2ee9SEric Astormov al, [t2].f.h 838fee2ee9SEric Astormov al, [t2.f.h] 848fee2ee9SEric Astor 858fee2ee9SEric Astor; CHECK: t3: 868fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [rip + t2+11] 878fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [rip + t2+11] 888fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [rip + t2+11] 898fee2ee9SEric Astor 908fee2ee9SEric Astort4: 918fee2ee9SEric Astormov al, j.FOOBAR.f.h 928fee2ee9SEric Astormov al, j.baz.b 938fee2ee9SEric Astor 948fee2ee9SEric Astor; CHECK: t4: 958fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [rip + j+11] 968fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [rip + j+1] 978fee2ee9SEric Astor 988fee2ee9SEric Astort5: 998fee2ee9SEric Astormov al, [ebx].FOOBAR.f.h 1008fee2ee9SEric Astormov al, [ebx.FOOBAR].f.h 1018fee2ee9SEric Astormov al, [ebx.FOOBAR.f.h] 1028fee2ee9SEric Astor 1038fee2ee9SEric Astor; CHECK: t5: 1048fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [ebx + 11] 1058fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [ebx + 11] 1068fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [ebx + 11] 1078fee2ee9SEric Astor 1088fee2ee9SEric Astort6: 1098fee2ee9SEric Astormov al, t2.FOOBAR.f.h 1108fee2ee9SEric Astormov al, [t2].FOOBAR.f.h 1118fee2ee9SEric Astormov al, [t2.FOOBAR].f.h 1128fee2ee9SEric Astormov al, [t2.FOOBAR.f.h] 1138fee2ee9SEric Astor 1148fee2ee9SEric Astor; CHECK: t6: 1158fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [rip + t2+11] 1168fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [rip + t2+11] 1178fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [rip + t2+11] 1188fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [rip + t2+11] 1198fee2ee9SEric Astor 1208fee2ee9SEric Astort7: 1218fee2ee9SEric Astormov al, [ebx].FOOBAR.e.b 1228fee2ee9SEric Astormov al, [ebx.FOOBAR].e.b 1238fee2ee9SEric Astormov al, [ebx.FOOBAR.e].b 1248fee2ee9SEric Astormov al, [ebx.FOOBAR.e.b] 1258fee2ee9SEric Astor 1268fee2ee9SEric Astor; CHECK: t7: 1278fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [ebx + 9] 1288fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [ebx + 9] 1298fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [ebx + 9] 1308fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [ebx + 9] 1318fee2ee9SEric Astor 1328fee2ee9SEric Astort8: 1338fee2ee9SEric Astormov al, t2.FOOBAR.e.b 1348fee2ee9SEric Astormov al, [t2].FOOBAR.e.b 1358fee2ee9SEric Astormov al, [t2.FOOBAR].e.b 1368fee2ee9SEric Astormov al, [t2.FOOBAR.e].b 1378fee2ee9SEric Astormov al, [t2.FOOBAR.e.b] 1388fee2ee9SEric Astor 1398fee2ee9SEric Astor; CHECK: t8: 1408fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [rip + t2+9] 1418fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [rip + t2+9] 1428fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [rip + t2+9] 1438fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [rip + t2+9] 1448fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [rip + t2+9] 1458fee2ee9SEric Astor 1468fee2ee9SEric AstorQUUX STRUCT 1478fee2ee9SEric Astor u DWORD ? 1488fee2ee9SEric Astor UNION 1498fee2ee9SEric Astor v WORD ? 1508fee2ee9SEric Astor w DWORD ? 1518fee2ee9SEric Astor STRUCT 1528fee2ee9SEric Astor x BYTE ? 1538fee2ee9SEric Astor y BYTE ? 1548fee2ee9SEric Astor ENDS 1558fee2ee9SEric Astor after_struct BYTE ? 1568fee2ee9SEric Astor ENDS 1578fee2ee9SEric Astor z DWORD ? 1588fee2ee9SEric AstorQUUX ENDS 1598fee2ee9SEric Astor 1608fee2ee9SEric Astort9: 1618fee2ee9SEric Astormov eax, [ebx].QUUX.u 1628fee2ee9SEric Astormov ax, [ebx].QUUX.v 1638fee2ee9SEric Astormov eax, [ebx].QUUX.w 1648fee2ee9SEric Astormov al, [ebx].QUUX.x 1658fee2ee9SEric Astormov al, [ebx].QUUX.y 1668fee2ee9SEric Astormov al, [ebx].QUUX.after_struct 1678fee2ee9SEric Astormov eax, [ebx].QUUX.z 1688fee2ee9SEric Astor 1698fee2ee9SEric Astor; CHECK: t9: 1708fee2ee9SEric Astor; CHECK-NEXT: mov eax, dword ptr [ebx] 1718fee2ee9SEric Astor; CHECK-NEXT: mov ax, word ptr [ebx + 4] 1728fee2ee9SEric Astor; CHECK-NEXT: mov eax, dword ptr [ebx + 4] 1738fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [ebx + 4] 1748fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [ebx + 5] 1758fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [ebx + 4] 1768fee2ee9SEric Astor; CHECK-NEXT: mov eax, dword ptr [ebx + 8] 1778fee2ee9SEric Astor 1788fee2ee9SEric Astort10: 1798fee2ee9SEric Astormov eax, FOOBAR.f 1808fee2ee9SEric Astormov eax, FOOBAR.f.h 1818fee2ee9SEric Astor 1828fee2ee9SEric Astor; CHECK: t10: 1838fee2ee9SEric Astor; CHECK-NEXT: mov eax, 10 1848fee2ee9SEric Astor; CHECK-NEXT: mov eax, 11 1858fee2ee9SEric Astor 1868fee2ee9SEric Astort11: 1878fee2ee9SEric Astormov ax, (FOOBAR PTR [ebx]).f 1888fee2ee9SEric Astormov ax, (FOOBAR PTR t1).f 1898fee2ee9SEric Astor 1908fee2ee9SEric Astor; CHECK: t11: 1918fee2ee9SEric Astor; CHECK-NEXT: mov ax, word ptr [ebx + 10] 1928fee2ee9SEric Astor; CHECK-NEXT: mov ax, word ptr [rip + t1+10] 1938fee2ee9SEric Astor 1948fee2ee9SEric AstorEND 195