translate-c: fix crash when last stmt of stmt expr is a decl
This commit is contained in:
@@ -3269,11 +3269,18 @@ fn transStmtExpr(c: *Context, scope: *Scope, stmt: *const clang.StmtExpr, used:
|
||||
else => try block_scope.statements.append(result),
|
||||
}
|
||||
}
|
||||
const break_node = try Tag.break_val.create(c.arena, .{
|
||||
.label = block_scope.label,
|
||||
.val = try transStmt(c, &block_scope.base, it[0], .used),
|
||||
});
|
||||
try block_scope.statements.append(break_node);
|
||||
|
||||
const last_result = try transStmt(c, &block_scope.base, it[0], .used);
|
||||
switch (last_result.tag()) {
|
||||
.declaration, .empty_block => {},
|
||||
else => {
|
||||
const break_node = try Tag.break_val.create(c.arena, .{
|
||||
.label = block_scope.label,
|
||||
.val = last_result,
|
||||
});
|
||||
try block_scope.statements.append(break_node);
|
||||
},
|
||||
}
|
||||
const res = try block_scope.complete(c);
|
||||
return maybeSuppressResult(c, used, res);
|
||||
}
|
||||
|
||||
@@ -4150,4 +4150,18 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
||||
,
|
||||
\\pub export var struct_foo: [*c]const u8 = "hello world";
|
||||
});
|
||||
|
||||
cases.add("unsupport declare statement at the last of a compound statement which belongs to a statement expr",
|
||||
\\void somefunc(void) {
|
||||
\\ int y;
|
||||
\\ (void)({y=1; _Static_assert(1);});
|
||||
\\}
|
||||
, &[_][]const u8{
|
||||
\\pub export fn somefunc() void {
|
||||
\\ var y: c_int = undefined;
|
||||
\\ _ = blk: {
|
||||
\\ y = 1;
|
||||
\\ };
|
||||
\\}
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user