aboutsummaryrefslogtreecommitdiff
path: root/tests/iii/extern-struct-rejected/program.cps
diff options
context:
space:
mode:
author_ov4 <ov4@ov4.org>2026-10-22 13:45:36 +0000
committer_ov4 <ov4@ov4.org>2026-10-22 13:45:36 +0000
commit3a6eb921b50e191468d29c233718657f9f85d68e (patch)
treeebf411667c1a4360f6e78e0ac971f9df924511d1 /tests/iii/extern-struct-rejected/program.cps
parent06538905915b15bde6364459929fe89cf0b8de5c (diff)
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 <noreply@anthropic.com>
Diffstat (limited to 'tests/iii/extern-struct-rejected/program.cps')
-rw-r--r--tests/iii/extern-struct-rejected/program.cps8
1 files changed, 2 insertions, 6 deletions
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