File: align_class.d

package info (click to toggle)
ldc 1%3A1.40.0-5
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 63,308 kB
  • sloc: cpp: 85,368; ansic: 21,877; makefile: 1,705; sh: 1,018; asm: 584; objc: 135; exp: 48; python: 12
file content (41 lines) | stat: -rw-r--r-- 1,351 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// RUN: %ldc -output-ll -of=%t.ll %s && FileCheck %s < %t.ll
// RUN: %ldc -run %s

struct S16 { align(16) short a; }

class D     { align(32) short d = 0xDD; }
// CHECK: %align_class.D = type <{ ptr, ptr, [{{(16|24)}} x i8], i16 }>
class E : D { S16 s16 = S16(0xEE); }
// CHECK: %align_class.E = type { ptr, ptr, [{{(16|24)}} x i8], i16, [14 x i8], %align_class.S16 }
class F : D { align(64) short f = 0xFF; }
// CHECK: %align_class.F = type <{ ptr, ptr, [{{(16|24)}} x i8], i16, [30 x i8], i16 }>

extern(C++) class CppClass { align(32) short a = 0xAA; }
// CHECK: %align_class.CppClass = type <{ ptr, [{{(24|28)}} x i8], i16 }>

void main()
{
    scope d = new D;
    // CHECK: = alloca %align_class.D, align 32
    static assert(D.d.offsetof == 32);
    assert(d.d == 0xDD);

    scope e = new E;
    // CHECK: = alloca %align_class.E, align 32
    static assert(E.d.offsetof == 32);
    assert(e.d == 0xDD);
    static assert(E.s16.offsetof == 48);
    assert(e.s16.a == 0xEE);

    scope f = new F;
    // CHECK: = alloca %align_class.F, align 64
    static assert(F.d.offsetof == 32);
    assert(f.d == 0xDD);
    static assert(F.f.offsetof == 64);
    assert(f.f == 0xFF);

    scope cppClass = new CppClass;
    // CHECK: = alloca %align_class.CppClass, align 32
    static assert(CppClass.a.offsetof == 32);
    assert(cppClass.a == 0xAA);
}