zig

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

commit 869167fc6d1f672f2bb827404b0e704223edab41 (tree)
parent cbb3f1d76c6a89acdb04cb628c349eee69dfacf5
Author: Andrew Kelley <superjoe30@gmail.com>
Date:   Tue,  4 Sep 2018 17:38:48 -0400

compile error for @noInlineCall on an inline fn

closes #1133

Diffstat:
Msrc/ir.cpp | 5+++++
Mtest/compile_errors.zig | 11+++++++++++
2 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/src/ir.cpp b/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); diff --git a/test/compile_errors.zig b/test/compile_errors.zig @@ -2,6 +2,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 { \\ var p: i32 = undefined;