diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2022-09-12 19:37:03 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2022-09-13 02:04:20 -0700 |
| commit | f8a9bc57ce1a2a5a1b90e9a33501b64f2dd79019 (patch) | |
| tree | efe1f2ac3ba62ea641687bb82c927826ef72cee1 /src/translate_c | |
| parent | 188902a710a64b08762d7731aab81cb695322184 (diff) | |
| download | zig-f8a9bc57ce1a2a5a1b90e9a33501b64f2dd79019.tar.gz zig-f8a9bc57ce1a2a5a1b90e9a33501b64f2dd79019.zip | |
translate-c: lower discards differently
This makes translate-c lower discards as `_ = @TypeOf(foo);` to avoid
tripping the "pointless discard" error.
Ideally, translate-c would avoid emitting pointless discards, in which
case this commit can be reverted, however, that is a separate
enhancement.
Diffstat (limited to 'src/translate_c')
| -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; |
