diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/translate_c/ast.zig | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/src/translate_c/ast.zig b/src/translate_c/ast.zig index 307a7e9ea7..ce88a1a292 100644 --- a/src/translate_c/ast.zig +++ b/src/translate_c/ast.zig @@ -1550,14 +1550,27 @@ fn renderNode(c: *Context, node: Node) Allocator.Error!NodeIndex { .main_token = try c.addToken(.identifier, "_"), .data = undefined, }); - return c.addNode(.{ - .tag = .assign, - .main_token = try c.addToken(.equal, "="), - .data = .{ - .lhs = lhs, - .rhs = try renderNode(c, payload.value), - }, - }); + const main_token = try c.addToken(.equal, "="); + if (payload.value.tag() == .identifier) { + // Render as `_ = @TypeOf(foo);` to avoid tripping "pointless discard" error. + return c.addNode(.{ + .tag = .assign, + .main_token = main_token, + .data = .{ + .lhs = lhs, + .rhs = try renderBuiltinCall(c, "@TypeOf", &.{payload.value}), + }, + }); + } else { + return c.addNode(.{ + .tag = .assign, + .main_token = main_token, + .data = .{ + .lhs = lhs, + .rhs = try renderNode(c, payload.value), + }, + }); + } }, .@"while" => { const payload = node.castTag(.@"while").?.data; |
