Files
c3c/test/test_suite/functions/varargs.c3t
2021-05-11 14:58:21 +02:00

38 lines
1.4 KiB
Plaintext

module varargs;
extern func void printf(char* c, ...);
func void test()
{
printf("%d\n", true);
printf("%d\n", 123);
printf("%f\n", 12.3);
ichar x1 = -123;
bool b = false;
float z1 = 12.3;
printf("%d\n", b);
printf("%d\n", x1);
printf("%f\n", z1);
}
// #expect: varargs.ll
%x1 = alloca i8, align 1
%b = alloca i8, align 1
%z1 = alloca float, align 4
call void (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i32 1)
call void (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i32 0, i32 0), i32 123)
call void (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i32 0, i32 0), double 1.230000e+01)
store i8 -123, i8* %x1, align 1
store i8 0, i8* %b, align 1
store float 0x40289999A0000000, float* %z1, align 4
%0 = load i8, i8* %b, align 1
%1 = trunc i8 %0 to i1
%boolsi = zext i1 %1 to i32
call void (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i32 0, i32 0), i32 %boolsi)
%2 = load i8, i8* %x1, align 1
%sisiext = sext i8 %2 to i32
call void (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i32 0, i32 0), i32 %sisiext)
%3 = load float, float* %z1, align 4
%fpfpext = fpext float %3 to double
call void (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i32 0, i32 0), double %fpfpext)