16bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// RUN: %clang_cc1 -triple i386-unknown-unknown -emit-llvm -o - %s | FileCheck %s
2a14db75641f377ef8b033c67653cd95ac4c36fe3Chris Lattner
3a14db75641f377ef8b033c67653cd95ac4c36fe3Chris Lattner// PR6433 - Don't crash on va_arg(typedef).
4a14db75641f377ef8b033c67653cd95ac4c36fe3Chris Lattnertypedef double gdouble;
5a14db75641f377ef8b033c67653cd95ac4c36fe3Chris Lattnervoid focus_changed_cb () {
6a14db75641f377ef8b033c67653cd95ac4c36fe3Chris Lattner    __builtin_va_list pa;
7a14db75641f377ef8b033c67653cd95ac4c36fe3Chris Lattner    double mfloat;
8a14db75641f377ef8b033c67653cd95ac4c36fe3Chris Lattner    mfloat = __builtin_va_arg((pa), gdouble);
9a14db75641f377ef8b033c67653cd95ac4c36fe3Chris Lattner}
10a14db75641f377ef8b033c67653cd95ac4c36fe3Chris Lattner
1183ea530f9da1b8ca57773bf53418ce9fc98f46acRichard Smithvoid vararg(int, ...);
1283ea530f9da1b8ca57773bf53418ce9fc98f46acRichard Smithvoid function_as_vararg() {
1383ea530f9da1b8ca57773bf53418ce9fc98f46acRichard Smith  // CHECK: define {{.*}}function_as_vararg
1483ea530f9da1b8ca57773bf53418ce9fc98f46acRichard Smith  // CHECK-NOT: llvm.trap
1583ea530f9da1b8ca57773bf53418ce9fc98f46acRichard Smith  vararg(0, focus_changed_cb);
1683ea530f9da1b8ca57773bf53418ce9fc98f46acRichard Smith}
176bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
186bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid vla(int n, ...)
196bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines{
206bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  __builtin_va_list ap;
216bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  void *p;
226bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  p = __builtin_va_arg(ap, typeof (int (*)[++n])); // CHECK: add nsw i32 {{.*}}, 1
236bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines}
24