diff options
| author | _ov4 <ov4@ov4.org> | 2026-10-22 13:45:36 +0000 |
|---|---|---|
| committer | _ov4 <ov4@ov4.org> | 2026-10-22 13:45:36 +0000 |
| commit | 3a6eb921b50e191468d29c233718657f9f85d68e (patch) | |
| tree | ebf411667c1a4360f6e78e0ac971f9df924511d1 /tests/iii/extern-struct-rejected/program.cps | |
| parent | 06538905915b15bde6364459929fe89cf0b8de5c (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.cps | 8 |
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 |
