# no-copy semantics for for loops · gitcafe/zig

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

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

Visibility: public

Requested revision: 143d6ada8f93872b94a8f20927e11cae243028d9

Requested commit: 143d6ada8f93872b94a8f20927e11cae243028d9

Commit: 143d6ada8f93872b94a8f20927e11cae243028d9

Tree: 779fd513b42ed24ecd9d37ba3122e78ad8ca0df8

Author: Andrew Kelley

Committer: Andrew Kelley

## Message

````
no-copy semantics for for loops

Note that only the index variable requires a stack allocation, and the
memcpy for the element is gone.

```zig
export fn entry() void {
    var buf: [10]i32 = undefined;
    for (buf) |x| {}
}
```

```llvm
define void @entry() #2 !dbg !35 {
Entry:
  %buf = alloca [10 x i32], align 4
  %i = alloca i64, align 8
  %0 = bitcast [10 x i32]* %buf to i8*, !dbg !47
  call void @llvm.memset.p0i8.i64(i8* align 4 %0, i8 -86, i64 40, i1 false), !dbg !47
  call void @llvm.dbg.declare(metadata [10 x i32]* %buf, metadata !39, metadata !DIExpression()), !dbg !47
  store i64 0, i64* %i, align 8, !dbg !48
  call void @llvm.dbg.declare(metadata i64* %i, metadata !45, metadata !DIExpression()), !dbg !48
  br label %ForCond, !dbg !48

ForCond:                                          ; preds = %ForBody, %Entry
  %1 = load i64, i64* %i, align 8, !dbg !48
  %2 = icmp ult i64 %1, 10, !dbg !48
  br i1 %2, label %ForBody, label %ForEnd, !dbg !48

ForBody:                                          ; preds = %ForCond
  %3 = getelementptr inbounds [10 x i32], [10 x i32]* %buf, i64 0, i64 %1, !dbg !48
  call void @llvm.dbg.declare(metadata i32* %3, metadata !46, metadata !DIExpression()), !dbg !49
  %4 = add nuw i64 %1, 1, !dbg !48
  store i64 %4, i64* %i, align 8, !dbg !48
  br label %ForCond, !dbg !48

ForEnd:                                           ; preds = %ForCond
  ret void, !dbg !50
}
```

````

## Parents

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

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