zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 7b863aa8ac6d48092c8d5b3c8713d9f8a9cfbdf3 (tree)
parent 4bb5d17edc85eac74626224810d6a44a3c73cca3
Author: Isaac Freund <ifreund@ifreund.xyz>
Date:   Sat, 28 Aug 2021 23:18:47 +0200

AstGen: short-circuit rvalue() if code is unreachable

This avoids generating instructions which will never be reached.

Diffstat:
Msrc/AstGen.zig | 3++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/AstGen.zig b/src/AstGen.zig @@ -8389,7 +8389,7 @@ fn nodeImpliesRuntimeBits(tree: *const ast.Tree, start_node: ast.Node.Index) boo } } -/// Applies `rl` semantics to `inst`. Expressions which do not do their own handling of +/// Applies `rl` semantics to `result`. Expressions which do not do their own handling of /// result locations must call this function on their result. /// As an example, if the `ResultLoc` is `ptr`, it will write the result to the pointer. /// If the `ResultLoc` is `ty`, it will coerce the result to the type. @@ -8399,6 +8399,7 @@ fn rvalue( result: Zir.Inst.Ref, src_node: ast.Node.Index, ) InnerError!Zir.Inst.Ref { + if (gz.endsWithNoReturn()) return result; switch (rl) { .none, .none_or_ref, .coerced_ty => return result, .discard => {