Commit a99ad52b36
Changed files (2)
src
test
incremental
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);
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"