Skip to content

Commit 92fb05b

Browse files
committed
llvm: revert debug file path resolution changes
Fixes test-stack-traces on windows.
1 parent 2739a15 commit 92fb05b

File tree

1 file changed

+21
-3
lines changed

1 file changed

+21
-3
lines changed

src/codegen/llvm.zig

+21-3
Original file line numberDiff line numberDiff line change
@@ -779,6 +779,7 @@ pub const Object = struct {
779779
debug_enums: std.ArrayListUnmanaged(Builder.Metadata),
780780
debug_globals: std.ArrayListUnmanaged(Builder.Metadata),
781781

782+
debug_file_map: std.AutoHashMapUnmanaged(*const Module.File, Builder.Metadata),
782783
debug_type_map: std.AutoHashMapUnmanaged(Type, Builder.Metadata),
783784

784785
debug_unresolved_namespace_scopes: std.AutoArrayHashMapUnmanaged(InternPool.NamespaceIndex, Builder.Metadata),
@@ -961,6 +962,7 @@ pub const Object = struct {
961962
.debug_globals_fwd_ref = debug_globals_fwd_ref,
962963
.debug_enums = .{},
963964
.debug_globals = .{},
965+
.debug_file_map = .{},
964966
.debug_type_map = .{},
965967
.debug_unresolved_namespace_scopes = .{},
966968
.target = target,
@@ -978,8 +980,9 @@ pub const Object = struct {
978980

979981
pub fn deinit(self: *Object) void {
980982
const gpa = self.gpa;
981-
self.debug_globals.deinit(gpa);
982983
self.debug_enums.deinit(gpa);
984+
self.debug_globals.deinit(gpa);
985+
self.debug_file_map.deinit(gpa);
983986
self.debug_type_map.deinit(gpa);
984987
self.debug_unresolved_namespace_scopes.deinit(gpa);
985988
self.decl_map.deinit(gpa);
@@ -1922,10 +1925,25 @@ pub const Object = struct {
19221925
}
19231926

19241927
fn getDebugFile(o: *Object, file: *const Module.File) Allocator.Error!Builder.Metadata {
1925-
return try o.builder.debugFile(
1928+
const gpa = o.gpa;
1929+
const gop = try o.debug_file_map.getOrPut(gpa, file);
1930+
errdefer assert(o.debug_file_map.remove(file));
1931+
if (gop.found_existing) return gop.value_ptr.*;
1932+
gop.value_ptr.* = try o.builder.debugFile(
19261933
try o.builder.metadataString(std.fs.path.basename(file.sub_file_path)),
1927-
if (std.fs.path.dirname(file.sub_file_path)) |dirname| try o.builder.metadataString(dirname) else .none,
1934+
dir_path: {
1935+
const sub_path = std.fs.path.dirname(file.sub_file_path) orelse "";
1936+
const dir_path = try file.mod.root.joinString(gpa, sub_path);
1937+
defer gpa.free(dir_path);
1938+
if (std.fs.path.isAbsolute(dir_path))
1939+
break :dir_path try o.builder.metadataString(dir_path);
1940+
var abs_buffer: [std.fs.MAX_PATH_BYTES]u8 = undefined;
1941+
const abs_path = std.fs.realpath(dir_path, &abs_buffer) catch
1942+
break :dir_path try o.builder.metadataString(dir_path);
1943+
break :dir_path try o.builder.metadataString(abs_path);
1944+
},
19281945
);
1946+
return gop.value_ptr.*;
19291947
}
19301948

19311949
pub fn lowerDebugType(

0 commit comments

Comments
 (0)