aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2019-06-21 17:49:54 -0400
committerAndrew Kelley <andrew@ziglang.org>2019-06-21 17:49:54 -0400
commitff6d563b0455aea51775e6906f5e7f0dd67b7127 (patch)
tree46eb0b20c729ee623bbc4f6f8b965c09c9c8a1b3 /src
parent5441f7767237709e8f3c05c2dc75070e835b4024 (diff)
downloadzig-ff6d563b0455aea51775e6906f5e7f0dd67b7127.tar.gz
zig-ff6d563b0455aea51775e6906f5e7f0dd67b7127.zip
fix implicit cast to optional to error union to return result loc
Diffstat (limited to 'src')
-rw-r--r--src/analyze.cpp2
-rw-r--r--src/ir.cpp9
2 files changed, 6 insertions, 5 deletions
diff --git a/src/analyze.cpp b/src/analyze.cpp
index d048dd9770..85e390f2e0 100644
--- a/src/analyze.cpp
+++ b/src/analyze.cpp
@@ -4512,6 +4512,8 @@ bool fn_eval_cacheable(Scope *scope, ZigType *return_type) {
ScopeVarDecl *var_scope = (ScopeVarDecl *)scope;
if (type_is_invalid(var_scope->var->var_type))
return false;
+ if (var_scope->var->const_value->special == ConstValSpecialUndef)
+ return false;
if (can_mutate_comptime_var_state(var_scope->var->const_value))
return false;
} else if (scope->id == ScopeIdFnDef) {
diff --git a/src/ir.cpp b/src/ir.cpp
index 425c225308..a6ec836a40 100644
--- a/src/ir.cpp
+++ b/src/ir.cpp
@@ -15092,7 +15092,9 @@ static IrInstruction *ir_resolve_result_raw(IrAnalyze *ira, IrInstruction *suspe
ZigType *ptr_return_type = get_pointer_to_type(ira->codegen, ira->explicit_return_type, false);
result_loc->written = true;
result_loc->resolved_loc = ir_build_return_ptr(ira, result_loc->source_instruction, ptr_return_type);
- set_up_result_loc_for_inferred_comptime(result_loc->resolved_loc);
+ if (ir_should_inline(ira->old_irb.exec, result_loc->source_instruction->scope)) {
+ set_up_result_loc_for_inferred_comptime(result_loc->resolved_loc);
+ }
return result_loc->resolved_loc;
}
case ResultLocIdPeer: {
@@ -15207,9 +15209,6 @@ static IrInstruction *ir_resolve_result_raw(IrAnalyze *ira, IrInstruction *suspe
parent_ptr_type->data.pointer.is_const, parent_ptr_type->data.pointer.is_volatile, PtrLenSingle,
parent_ptr_align, 0, 0, parent_ptr_type->data.pointer.allow_zero);
- if (value->value.special == ConstValSpecialRuntime) {
- parent_result_loc->value.special = ConstValSpecialRuntime;
- }
result_loc->written = true;
result_loc->resolved_loc = ir_analyze_ptr_cast(ira, suspend_source_instr, parent_result_loc,
ptr_type, result_bit_cast->base.source_instruction, false);
@@ -15388,7 +15387,7 @@ static bool ir_analyze_fn_call_inline_arg(IrAnalyze *ira, AstNode *fn_proto_node
casted_arg = arg;
}
- ConstExprValue *arg_val = ir_resolve_const(ira, casted_arg, UndefBad);
+ ConstExprValue *arg_val = ir_resolve_const(ira, casted_arg, UndefOk);
if (!arg_val)
return false;