Commit 869167fc6d

Andrew Kelley <superjoe30@gmail.com>
2018-09-04 23:38:48
compile error for @noInlineCall on an inline fn
closes #1133
1 parent cbb3f1d
Changed files (2)
src/ir.cpp
@@ -13644,6 +13644,11 @@ static TypeTableEntry *ir_analyze_fn_call(IrAnalyze *ira, IrInstructionCall *cal
         return ir_finish_anal(ira, result->value.type);
     }
 
+    if (fn_entry != nullptr && fn_entry->fn_inline == FnInlineAlways && fn_inline == FnInlineNever) {
+        ir_add_error(ira, &call_instruction->base,
+            buf_sprintf("no-inline call of inline function"));
+        return ira->codegen->builtin_types.entry_invalid;
+    }
 
     IrInstruction *new_call_instruction = ir_build_call_from(&ira->new_irb, &call_instruction->base,
             fn_entry, fn_ref, call_param_count, casted_args, false, fn_inline, false, nullptr, casted_new_stack);
test/compile_errors.zig
@@ -1,6 +1,17 @@
 const tests = @import("tests.zig");
 
 pub fn addCases(cases: *tests.CompileErrorContext) void {
+    cases.add(
+        "@noInlineCall on an inline function",
+        \\inline fn foo() void {}
+        \\
+        \\export fn entry() void {
+        \\    @noInlineCall(foo);
+        \\}
+    ,
+        ".tmp_source.zig:4:5: error: no-inline call of inline function",
+    );
+
     cases.add(
         "comptime continue inside runtime switch",
         \\export fn entry() void {