From a99ad52b362d966f772f29ad14ae1714218bc033 Mon Sep 17 00:00:00 2001 From: mlugg Date: Tue, 20 Aug 2024 16:05:04 +0100 Subject: [PATCH] Sema: register correct dependencies for inline calls And add a corresponding test case. --- src/Sema.zig | 7 +++++++ test/incremental/modify_inline_fn | 23 +++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 test/incremental/modify_inline_fn diff --git a/src/Sema.zig b/src/Sema.zig index b0f2623652..3752cefe3f 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -7598,6 +7598,9 @@ fn analyzeCall( const module_fn = zcu.funcInfo(module_fn_index); + // The call site definitely depends on the function's signature. + try sema.declareDependency(.{ .src_hash = module_fn.zir_body_inst }); + // This is not a function instance, so the function's `Nav` has a // `Cau` -- we don't need to check `generic_owner`. const fn_nav = ip.getNav(module_fn.owner_nav); @@ -7755,6 +7758,10 @@ fn analyzeCall( break :res Air.internedToRef(memoized_call.result); } + // Since we're doing an inline call, we depend on the source code of the whole + // function declaration. + try sema.declareDependency(.{ .src_hash = fn_cau.zir_index }); + new_fn_info.return_type = sema.fn_ret_ty.toIntern(); if (!is_comptime_call and !block.is_typeof) { const zir_tags = sema.code.instructions.items(.tag); diff --git a/test/incremental/modify_inline_fn b/test/incremental/modify_inline_fn new file mode 100644 index 0000000000..633e7a0728 --- /dev/null +++ b/test/incremental/modify_inline_fn @@ -0,0 +1,23 @@ +#target=x86_64-linux +#update=initial version +#file=main.zig +const std = @import("std"); +pub fn main() !void { + const str = getStr(); + try std.io.getStdOut().writeAll(str); +} +inline fn getStr() []const u8 { + return "foo\n"; +} +#expect_stdout="foo\n" +#update=change the string +#file=main.zig +const std = @import("std"); +pub fn main() !void { + const str = getStr(); + try std.io.getStdOut().writeAll(str); +} +inline fn getStr() []const u8 { + return "bar\n"; +} +#expect_stdout="bar\n"