aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-01-10 11:51:19 +0900
committernsfisis <nsfisis@gmail.com>2026-01-10 11:51:19 +0900
commit1ee69b6b1383f03fb8e060196ed781c171561d45 (patch)
treeedc6e472a5ada70f5e454ac236df1228dc5e5bab
parent175b00181b627bec69f645d6d8fc880a2bdd3f81 (diff)
downloadducc-1ee69b6b1383f03fb8e060196ed781c171561d45.tar.gz
ducc-1ee69b6b1383f03fb8e060196ed781c171561d45.tar.zst
ducc-1ee69b6b1383f03fb8e060196ed781c171561d45.zip
feat: support (void) cast
-rw-r--r--justfile3
-rw-r--r--src/codegen.c4
-rw-r--r--tests/cast_expressions.sh17
3 files changed, 24 insertions, 0 deletions
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