diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2019-06-10 19:11:34 -0400 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2019-06-10 19:11:34 -0400 |
| commit | 9a324ecb42f69791d49bc8e62e935aec75b5e920 (patch) | |
| tree | fca70ea0a58b6795c775f414e0f3b778c1be7d06 /src/parser.cpp | |
| parent | 65f6ea66f4a86c45004547bb5ac079b8286f980e (diff) | |
| download | zig-9a324ecb42f69791d49bc8e62e935aec75b5e920.tar.gz zig-9a324ecb42f69791d49bc8e62e935aec75b5e920.zip | |
result loc semantics for loading packed struct pointer to packed struct
```zig
export fn entry() void {
var x = foo();
var ptr = &x.b;
var y = ptr.*;
}
const Foo = packed struct {
a: u24 = 1,
b: Bar = Bar{},
};
const Bar = packed struct {
a: u4 = 2,
b: u4 = 3,
};
```
```llvm
define void @entry() #2 !dbg !35 {
Entry:
%x = alloca %Foo, align 1
%ptr = alloca i32*, align 8
%y = alloca %Bar, align 1
call fastcc void @foo(%Foo* sret %x), !dbg !55
call void @llvm.dbg.declare(metadata %Foo* %x, metadata !39, metadata !DIExpression()), !dbg !56
%0 = getelementptr inbounds %Foo, %Foo* %x, i32 0, i32 0, !dbg !57
store i32* %0, i32** %ptr, align 8, !dbg !57
call void @llvm.dbg.declare(metadata i32** %ptr, metadata !51, metadata !DIExpression()), !dbg !58
%1 = load i32*, i32** %ptr, align 8, !dbg !59
%2 = load i32, i32* %1, align 1, !dbg !60
%3 = lshr i32 %2, 24, !dbg !60
%4 = trunc i32 %3 to i8, !dbg !60
%5 = bitcast %Bar* %y to i8*, !dbg !60
store i8 %4, i8* %5, !dbg !60
call void @llvm.dbg.declare(metadata %Bar* %y, metadata !54, metadata !DIExpression()), !dbg !61
ret void, !dbg !62
}
```
Diffstat (limited to 'src/parser.cpp')
0 files changed, 0 insertions, 0 deletions
