authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-05-30 23:25:37-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-05-30 23:25:37-04:00
log95d9835898052835ce767be2fcc0e4344a704b96
tree6ae7dde24db25b797aac4e7ec18ddca4d1c6c713
parenta4aca787229e3b0b3dc992b747cc72a561c2078c
signature Commit is signed but in an unrecognized format.

no-copy semantics for nested if

```zig export fn entry() void { var c = true; var x = if (c) u8(4) else if (c) u16(100) else u32(10); } ``` ```llvm define void @entry() #2 !dbg !35 { Entry: %c = alloca i1, align 1 %x = alloca i32, align 4 store i1 true, i1* %c, align 1, !dbg !44 call void @llvm.dbg.declare(metadata i1* %c, metadata !39, metadata !DIExpression()), !dbg !45 %0 = load i1, i1* %c, align 1, !dbg !46 br i1 %0, label %Then2, label %Else, !dbg !46 Else: ; preds = %Entry %1 = load i1, i1* %c, align 1, !dbg !47 br i1 %1, label %Then, label %Else1, !dbg !47 Then: ; preds = %Else br label %EndIf, !dbg !48 Else1: ; preds = %Else br label %EndIf, !dbg !48 Then2: ; preds = %Entry br label %EndIf3, !dbg !49 EndIf: ; preds = %Else1, %Then %2 = phi i32 [ 100, %Then ], [ 10, %Else1 ], !dbg !48 br label %EndIf3, !dbg !49 EndIf3: ; preds = %EndIf, %Then2 %3 = phi i32 [ 4, %Then2 ], [ %2, %EndIf ], !dbg !49 store i32 %3, i32* %x, align 4, !dbg !49 call void @llvm.dbg.declare(metadata i32* %x, metadata !42, metadata !DIExpression()), !dbg !50 ret void, !dbg !51 } ```

1 files changed, 2 insertions(+), 1 deletions(-)

src/ir.cpp+2-1
......@@ -14328,13 +14328,14 @@ static ZigType *ir_result_loc_expected_type(IrAnalyze *ira, ResultLoc *result_lo
1432814328 switch (result_loc->id) {
1432914329 case ResultLocIdInvalid:
1433014330 case ResultLocIdPeerParent:
14331 case ResultLocIdPeer:
1433214331 zig_unreachable();
1433314332 case ResultLocIdNone:
1433414333 case ResultLocIdVar:
1433514334 return nullptr;
1433614335 case ResultLocIdReturn:
1433714336 return ira->explicit_return_type;
14337 case ResultLocIdPeer:
14338 return reinterpret_cast<ResultLocPeer*>(result_loc)->parent->resolved_type;
1433814339 }
1433914340 zig_unreachable();
1434014341}