# no-copy semantics for peer result function calls · gitcafe/zig

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

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

Visibility: public

Requested revision: 76a3938d69e23a22ee2d5db971737c532ee8a6b0

Requested commit: 76a3938d69e23a22ee2d5db971737c532ee8a6b0

Commit: 76a3938d69e23a22ee2d5db971737c532ee8a6b0

Tree: 175f87fd222edfefd2ec2136619ff1e3a2b165c8

Author: Andrew Kelley

Committer: Andrew Kelley

## Message

````
no-copy semantics for peer result function calls

```zig
export fn entry() void {
    var c = true;
    var x = if (c) foo() else bar();
}
```

```llvm
define void @entry() #2 !dbg !35 {
Entry:
  %c = alloca i1, align 1
  %x = alloca %Foo, align 4
  store i1 true, i1* %c, align 1, !dbg !47
  call void @llvm.dbg.declare(metadata i1* %c, metadata !39, metadata !DIExpression()), !dbg !48
  %0 = load i1, i1* %c, align 1, !dbg !49
  br i1 %0, label %Then, label %Else, !dbg !49

Then:                                             ; preds = %Entry
  call fastcc void @foo(%Foo* sret %x), !dbg !50
  br label %EndIf, !dbg !51

Else:                                             ; preds = %Entry
  call fastcc void @bar(%Foo* sret %x), !dbg !52
  br label %EndIf, !dbg !51

EndIf:                                            ; preds = %Else, %Then
  call void @llvm.dbg.declare(metadata %Foo* %x, metadata !42, metadata !DIExpression()), !dbg !53
  ret void, !dbg !54
}
```

````

## Parents

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

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