aboutsummaryrefslogtreecommitdiff
path: root/src/translate_c
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2022-09-12 19:37:03 -0700
committerAndrew Kelley <andrew@ziglang.org>2022-09-13 02:04:20 -0700
commitf8a9bc57ce1a2a5a1b90e9a33501b64f2dd79019 (patch)
treeefe1f2ac3ba62ea641687bb82c927826ef72cee1 /src/translate_c
parent188902a710a64b08762d7731aab81cb695322184 (diff)
downloadzig-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.zig29
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;