Commit 3bfa63aa61

Tau <jonathan.haehne@hotmail.com>
2024-06-24 09:30:22
ModuleDebugInfo: Discard C++ namespaces appearing in PDBs
1 parent 9c2d597
Changed files (2)
lib
src
codegen
lib/std/debug.zig
@@ -2465,13 +2465,24 @@ pub const ModuleDebugInfo = switch (native_os) {
                 module,
                 relocated_address - coff_section.virtual_address,
             ) orelse "???";
+            // While DWARF gets us just the function's own name, the PDB
+            // stores it qualified with its namespace by the C++ `::`
+            // operator. We can strip that for consistency; the
+            // SymbolInfo will contain the line number, which is a more
+            // language-neutral way of distinguishing same-named symbols
+            // anyway.
+            const symbol_simple_name = if (mem.indexOf(u8, symbol_name, "::")) |cpp_namespace|
+                symbol_name[cpp_namespace + 2 ..]
+            else
+                symbol_name;
+
             const opt_line_info = try self.pdb.?.getLineNumberInfo(
                 module,
                 relocated_address - coff_section.virtual_address,
             );
 
             return SymbolInfo{
-                .symbol_name = symbol_name,
+                .symbol_name = symbol_simple_name,
                 .compile_unit_name = obj_basename,
                 .line_info = opt_line_info,
             };
src/codegen/llvm.zig
@@ -2457,8 +2457,7 @@ pub const Object = struct {
                             // We still may want these for a Zig expression
                             // evaluator in debuggers, but for now they are
                             // completely useless.
-                            .ComptimeInt, .ComptimeFloat,
-                            .Type, .Undefined, .Null, .EnumLiteral => continue,
+                            .ComptimeInt, .ComptimeFloat, .Type, .Undefined, .Null, .EnumLiteral => continue,
                             else => {},
                         }