# result loc semantics for loading packed struct pointer to packed struct · gitcafe/zig

[View on GitCafe](https://git.cafe/gitcafe/zig/commit/9a324ecb42f69791d49bc8e62e935aec75b5e920)

Repository: [gitcafe/zig](https://git.cafe/gitcafe/zig)

Visibility: public

Requested revision: 9a324ecb42f69791d49bc8e62e935aec75b5e920

Requested commit: 9a324ecb42f69791d49bc8e62e935aec75b5e920

Commit: 9a324ecb42f69791d49bc8e62e935aec75b5e920

Tree: fca70ea0a58b6795c775f414e0f3b778c1be7d06

Author: Andrew Kelley

Committer: Andrew Kelley

## Message

````
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
}
```

````

## Parents

- [65f6ea66f4a86c45004547bb5ac079b8286f980e](https://git.cafe/gitcafe/zig/commit/65f6ea66f4a86c45004547bb5ac079b8286f980e?format=markdown)

[Source at this commit](https://git.cafe/gitcafe/zig/tree/9a324ecb42f69791d49bc8e62e935aec75b5e920?format=markdown)
