From 46a6d50fdf4d26e8af22fb6a5207b9fab3d0777a Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Mon, 23 Oct 2023 18:35:10 -0700 Subject: [PATCH 1/2] Sema: make `@src().line` comptime-known Reverts 89cef9f5f731f8f33dc935aac3c21bd57c92900d. Closes #13315 --- src/Sema.zig | 5 +---- .../cases/compile_errors/src_fields_runtime.zig | 17 ----------------- 2 files changed, 1 insertion(+), 21 deletions(-) delete mode 100644 test/cases/compile_errors/src_fields_runtime.zig diff --git a/src/Sema.zig b/src/Sema.zig index e3db1cfee0..418e9441f0 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -16883,10 +16883,7 @@ fn zirBuiltinSrc( // fn_name: [:0]const u8, func_name_val, // line: u32, - try mod.intern(.{ .runtime_value = .{ - .ty = .u32_type, - .val = (try mod.intValue(Type.u32, extra.line + 1)).toIntern(), - } }), + (try mod.intValue(Type.u32, extra.line + 1)).toIntern(), // column: u32, (try mod.intValue(Type.u32, extra.column + 1)).toIntern(), }; diff --git a/test/cases/compile_errors/src_fields_runtime.zig b/test/cases/compile_errors/src_fields_runtime.zig deleted file mode 100644 index a982831123..0000000000 --- a/test/cases/compile_errors/src_fields_runtime.zig +++ /dev/null @@ -1,17 +0,0 @@ -pub export fn entry1() void { - const s = @src(); - comptime var a: []const u8 = s.file; - comptime var b: []const u8 = s.fn_name; - comptime var c: u32 = s.column; - comptime var d: u32 = s.line; - _ = a; - _ = b; - _ = c; - _ = d; -} - -// error -// backend=stage2 -// target=native -// -// :6:28: error: cannot store runtime value in compile time variable From c01aa26bd3715f2426f45f67de944b3192293d37 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Mon, 23 Oct 2023 18:36:00 -0700 Subject: [PATCH 2/2] tracy: protect source info via global constant When the code is written this way, you get a compile error if the pointer given to Tracy does not have a static lifetime. This would have caught the regression in #13315. --- src/tracy.zig | 52 ++++++++++++++++++++++++--------------------------- 1 file changed, 24 insertions(+), 28 deletions(-) diff --git a/src/tracy.zig b/src/tracy.zig index 10f2410091..08774f9bd3 100644 --- a/src/tracy.zig +++ b/src/tracy.zig @@ -63,44 +63,40 @@ pub const Ctx = if (enable) ___tracy_c_zone_context else struct { pub inline fn trace(comptime src: std.builtin.SourceLocation) Ctx { if (!enable) return .{}; + const global = struct { + const loc: ___tracy_source_location_data = .{ + .name = null, + .function = src.fn_name.ptr, + .file = src.file.ptr, + .line = src.line, + .color = 0, + }; + }; + if (enable_callstack) { - return ___tracy_emit_zone_begin_callstack(&.{ - .name = null, - .function = src.fn_name.ptr, - .file = src.file.ptr, - .line = src.line, - .color = 0, - }, callstack_depth, 1); + return ___tracy_emit_zone_begin_callstack(&global.loc, callstack_depth, 1); } else { - return ___tracy_emit_zone_begin(&.{ - .name = null, - .function = src.fn_name.ptr, - .file = src.file.ptr, - .line = src.line, - .color = 0, - }, 1); + return ___tracy_emit_zone_begin(&global.loc, 1); } } pub inline fn traceNamed(comptime src: std.builtin.SourceLocation, comptime name: [:0]const u8) Ctx { if (!enable) return .{}; + const global = struct { + const loc: ___tracy_source_location_data = .{ + .name = name.ptr, + .function = src.fn_name.ptr, + .file = src.file.ptr, + .line = src.line, + .color = 0, + }; + }; + if (enable_callstack) { - return ___tracy_emit_zone_begin_callstack(&.{ - .name = name.ptr, - .function = src.fn_name.ptr, - .file = src.file.ptr, - .line = src.line, - .color = 0, - }, callstack_depth, 1); + return ___tracy_emit_zone_begin_callstack(&global.loc, callstack_depth, 1); } else { - return ___tracy_emit_zone_begin(&.{ - .name = name.ptr, - .function = src.fn_name.ptr, - .file = src.file.ptr, - .line = src.line, - .color = 0, - }, 1); + return ___tracy_emit_zone_begin(&global.loc, 1); } }