35 lines · c
1// RUN: %clang_cc1 -triple i386-unknown-unknown -std=c2y -emit-llvm -o - %s | FileCheck %s2 3// PR6433 - Don't crash on va_arg(typedef).4typedef double gdouble;5void focus_changed_cb (void) {6 __builtin_va_list pa;7 double mfloat;8 mfloat = __builtin_va_arg((pa), gdouble);9}10 11void vararg(int, ...);12void function_as_vararg(void) {13 // CHECK: define {{.*}}function_as_vararg14 // CHECK-NOT: llvm.trap15 vararg(0, focus_changed_cb);16}17 18void vla(int n, ...)19{20 __builtin_va_list ap;21 void *p;22 p = __builtin_va_arg(ap, typeof (int (*)[++n])); // CHECK: add nsw i32 {{.*}}, 123}24 25// Ensure that __builtin_va_start(list, 0) and __builtin_c23_va_start(list)26// have the same codegen.27void noargs(...) {28 __builtin_va_list list;29 // CHECK: %list = alloca ptr30 __builtin_va_start(list, 0);31 // CHECK-NEXT: call void @llvm.va_start.p0(ptr %list) 32 __builtin_c23_va_start(list);33 // CHECK-NEXT: call void @llvm.va_start.p0(ptr %list)34}35