From 1ee69b6b1383f03fb8e060196ed781c171561d45 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sat, 10 Jan 2026 11:51:19 +0900 Subject: feat: support (void) cast --- justfile | 3 +++ src/codegen.c | 4 ++++ tests/cast_expressions.sh | 17 +++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/justfile b/justfile index 06c46db..2873de3 100644 --- a/justfile +++ b/justfile @@ -36,3 +36,6 @@ test-all: clean: rm -rf build rm -rf tests/tmp + +fmt: + nix fmt diff --git a/src/codegen.c b/src/codegen.c index be8acd7..e0e0b19 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -148,6 +148,10 @@ static void codegen_deref_expr(CodeGen* g, AstNode* ast, GenMode gen_mode) { static void codegen_cast_expr(CodeGen* g, AstNode* ast) { codegen_expr(g, ast->node_operand, GenMode_rval); + // (void) cast does nothing. + if (ast->ty->kind == TypeKind_void) + return; + int src_size = type_sizeof(ast->node_operand->ty); int dst_size = type_sizeof(ast->ty); diff --git a/tests/cast_expressions.sh b/tests/cast_expressions.sh index f6824ad..b493e04 100644 --- a/tests/cast_expressions.sh +++ b/tests/cast_expressions.sh @@ -152,3 +152,20 @@ int main() { return 0; } EOF + +cat <<'EOF' > expected +42 +EOF +test_diff <<'EOF' +int printf(const char*, ...); + +int f() { + return printf("42\n"); +} + +int main() { + (void)123; + (void)(5 + 6 + 7); + (void)f(); +} +EOF -- cgit v1.2.3-70-g09d2