diff options
| author | nsfisis <nsfisis@gmail.com> | 2025-07-21 20:48:01 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2025-08-15 10:04:32 +0900 |
| commit | 0c9dc7318361c93e837c8f4bc5c29869076c36cd (patch) | |
| tree | a0998f947324fb42885338d0bd729d02d4309f40 /tests | |
| parent | 1c48d0fe728c263bbe946a5d3adebaa29323ddff (diff) | |
| download | ducc-0c9dc7318361c93e837c8f4bc5c29869076c36cd.tar.gz ducc-0c9dc7318361c93e837c8f4bc5c29869076c36cd.tar.zst ducc-0c9dc7318361c93e837c8f4bc5c29869076c36cd.zip | |
feat: implement va_*() functions
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/063.sh | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/tests/063.sh b/tests/063.sh new file mode 100644 index 0000000..f5f9505 --- /dev/null +++ b/tests/063.sh @@ -0,0 +1,52 @@ +set -e + +cat <<'EOF' > expected +123 +456 789 +EOF + +bash ../../test_diff.sh <<'EOF' +int fprintf(); + +// System V Application Binary Interface +// AMD64 Architecture Processor Supplement +// (With LP64 and ILP32 Programming Models) +// Version 1.0 +// Figure 3.34: va_list Type Declaration +struct __va_list__ { + // unsigned int gp_offset; + // unsigned int fp_offset; + int gp_offset; + int fp_offset; + void* overflow_arg_area; + void* reg_save_area; +}; +// ducc currently does not support array type. +// typedef struct __va_list__ va_list[1]; +typedef struct __va_list__* va_list; + +// va_start() is currently implemented as a special form due to the limitation of #define macro. +void va_end(va_list args) { +} + +struct FILE; +typedef struct FILE FILE; + +extern FILE* stdout; + +int vfprintf(FILE*, const char*, va_list); + +void fatal_error(const char* msg, ...) { + va_list args; + va_start(args, msg); + vfprintf(stdout, msg, args); + va_end(args); + fprintf(stdout, "\n"); +} + +int main() { + fatal_error("%d", 123); + fatal_error("%d %d", 456, 789); + return 0; +} +EOF |
