From c01aa26bd3715f2426f45f67de944b3192293d37 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Mon, 23 Oct 2023 18:36:00 -0700 Subject: [PATCH] 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); } }