diff options
| author | Andrea Orru <andrea@orru.io> | 2018-04-13 11:11:21 -0700 |
|---|---|---|
| committer | Andrea Orru <andrea@orru.io> | 2018-04-13 11:11:21 -0700 |
| commit | 06614b3fa09954464c2e2f32756cacedc178a282 (patch) | |
| tree | 37cd43b61b1c8be543551ef7e9f6605bce847947 /src/ir.cpp | |
| parent | d2c672ab0cc969f97e30cf6a12e4bffcac7cee18 (diff) | |
| parent | fa05cab01a755827209b6ede299402f515681a81 (diff) | |
| download | zig-06614b3fa09954464c2e2f32756cacedc178a282.tar.gz zig-06614b3fa09954464c2e2f32756cacedc178a282.zip | |
Merge branch 'master' into zen_stdlib
Diffstat (limited to 'src/ir.cpp')
| -rw-r--r-- | src/ir.cpp | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/src/ir.cpp b/src/ir.cpp index 0b072cc696..3ba58a09bd 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -11395,7 +11395,19 @@ static TypeTableEntry *ir_analyze_instruction_decl_var(IrAnalyze *ira, IrInstruc } break; case VarClassRequiredAny: - // OK + if (casted_init_value->value.special == ConstValSpecialStatic && + casted_init_value->value.type->id == TypeTableEntryIdFn && + casted_init_value->value.data.x_ptr.data.fn.fn_entry->fn_inline == FnInlineAlways) + { + var_class_requires_const = true; + if (!var->src_is_const && !is_comptime_var) { + ErrorMsg *msg = ir_add_error_node(ira, source_node, + buf_sprintf("functions marked inline must be stored in const or comptime var")); + AstNode *proto_node = casted_init_value->value.data.x_ptr.data.fn.fn_entry->proto_node; + add_error_note(ira->codegen, msg, proto_node, buf_sprintf("declared here")); + result_type = ira->codegen->builtin_types.entry_invalid; + } + } break; } } @@ -11804,7 +11816,8 @@ static bool ir_analyze_fn_call_generic_arg(IrAnalyze *ira, AstNode *fn_proto_nod } } - bool comptime_arg = param_decl_node->data.param_decl.is_inline; + bool comptime_arg = param_decl_node->data.param_decl.is_inline || + casted_arg->value.type->id == TypeTableEntryIdNumLitInt || casted_arg->value.type->id == TypeTableEntryIdNumLitFloat; ConstExprValue *arg_val; @@ -11829,6 +11842,12 @@ static bool ir_analyze_fn_call_generic_arg(IrAnalyze *ira, AstNode *fn_proto_nod var->shadowable = !comptime_arg; *next_proto_i += 1; + } else if (casted_arg->value.type->id == TypeTableEntryIdNumLitInt || + casted_arg->value.type->id == TypeTableEntryIdNumLitFloat) + { + ir_add_error(ira, casted_arg, + buf_sprintf("compiler bug: integer and float literals in var args function must be casted. https://github.com/zig-lang/zig/issues/557")); + return false; } if (!comptime_arg) { |
