From 3a6eb921b50e191468d29c233718657f9f85d68e Mon Sep 17 00:00:00 2001 From: _ov4 Date: Thu, 22 Oct 2026 13:45:36 +0000 Subject: feat(codegen): pass C-struct records by value EXTERN parameters may now be C-struct records by value. clang's arrangement decides the passing: coerced through memory, flattened into elements, or indirect as byval or a pointer to a copy. Returning a record by value stays rejected for now. Co-Authored-By: Claude Opus 5.5 --- tests/iii/extern-struct-rejected/program.cps | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) (limited to 'tests/iii/extern-struct-rejected/program.cps') diff --git a/tests/iii/extern-struct-rejected/program.cps b/tests/iii/extern-struct-rejected/program.cps index e7f38d1..eec88a1 100644 --- a/tests/iii/extern-struct-rejected/program.cps +++ b/tests/iii/extern-struct-rejected/program.cps @@ -1,14 +1,10 @@ -// Records cross the EXTERN boundary only as C structs through a pointer type. +// Records cross the EXTERN boundary only as C structs. INCLUDE_OBJ "__libc" TYPE Person DECLARE Name : STRING DECLARE Age : C_INT ENDTYPE TYPE PPerson = ^Person -TYPE Point - DECLARE X : C_INT - DECLARE Y : C_INT -ENDTYPE EXTERN "C" EXTERN_PROCEDURE puts(PPerson) -EXTERN "C" EXTERN_FUNCTION abs(Point) RETURNS C_INT +EXTERN "C" EXTERN_FUNCTION abs(Person) RETURNS C_INT OUTPUT 1 -- cgit v1.3.1-4-g156e