Commit c01aa26bd3

Andrew Kelley <andrew@ziglang.org>
2023-10-24 03:36:00
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.
1 parent 46a6d50
Changed files (1)
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 .{};
 
-    if (enable_callstack) {
-        return ___tracy_emit_zone_begin_callstack(&.{
+    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,
-        }, callstack_depth, 1);
+        };
+    };
+
+    if (enable_callstack) {
+        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 .{};
 
-    if (enable_callstack) {
-        return ___tracy_emit_zone_begin_callstack(&.{
+    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,
-        }, callstack_depth, 1);
+        };
+    };
+
+    if (enable_callstack) {
+        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);
     }
 }