| /* https://issues.dlang.org/show_bug.cgi?id=15399 |
| TEST_OUTPUT: |
| --- |
| fail_compilation/test15399.d(31): Error: writing to misaligned pointer in field S1.ptr is not @safe |
| fail_compilation/test15399.d(32): Error: writing to misaligned pointer in field S2.ptr is not @safe |
| fail_compilation/test15399.d(33): Error: taking address of misaligned pointer in field S1.ptr is not @safe |
| fail_compilation/test15399.d(34): Error: taking address of misaligned pointer in field S2.ptr is not @safe |
| fail_compilation/test15399.d(35): Error: 'ref' of misaligned pointer in field S1.ptr is not @safe |
| fail_compilation/test15399.d(36): Error: 'ref' of misaligned pointer in field S2.ptr is not @safe |
| fail_compilation/test15399.d(37): Error: 'out' of misaligned pointer in field S1.ptr is not @safe |
| fail_compilation/test15399.d(38): Error: 'out' of misaligned pointer in field S2.ptr is not @safe |
| --- |
| */ |
| |
| struct S1 |
| { |
| char c; |
| align (1) |
| int* ptr; |
| } |
| |
| align (1) |
| struct S2 |
| { |
| int* ptr; |
| } |
| |
| @safe void test(S1* s1, S2* s2) |
| { |
| int* p = s1.ptr; |
| p = s2.ptr; |
| s1.ptr = null; |
| s2.ptr = null; |
| int** pp = &s1.ptr; |
| pp = &s2.ptr; |
| bar(s1.ptr); |
| bar(s2.ptr); |
| sinister(s1.ptr); |
| sinister(s2.ptr); |
| cbar(s1.ptr); |
| cbar(s2.ptr); |
| } |
| |
| @safe void bar(ref int*); |
| @safe void cbar(ref const int*); |
| @safe void sinister(out int*); |
| |