// FIXME: pthread_create() definition in Builtins.td doesn't match the real one, so it doesn't get recognized as a builtin and attributes aren't added.
// RUN: false
// XFAIL: *

// RUN: %clang_cc1 %s -emit-llvm -o - -disable-llvm-optzns | FileCheck %s

// CHECK: declare !callback ![[cid:[0-9]+]] {{.*}}i32 @pthread_create
// CHECK: ![[cid]] = !{![[cidb:[0-9]+]]}
// CHECK: ![[cidb]] = !{i64 2, i64 3, i1 false}

// Taken from test/Analysis/retain-release.m
//{
struct _opaque_pthread_t {};
struct _opaque_pthread_attr_t {};
typedef struct _opaque_pthread_t *__darwin_pthread_t;
typedef struct _opaque_pthread_attr_t __darwin_pthread_attr_t;
typedef __darwin_pthread_t pthread_t;
typedef __darwin_pthread_attr_t pthread_attr_t;

int pthread_create(pthread_t *, const pthread_attr_t *,
                   void *(*)(void *), void *);
//}

const int GlobalVar = 0;

static void *callee0(void *payload) {
  return payload;
}

static void *callee1(void *payload) {
  return payload;
}

void foo() {
  pthread_t MyFirstThread;
  pthread_create(&MyFirstThread, 0, callee0, 0);

  pthread_t MySecondThread;
  pthread_create(&MySecondThread, 0, callee1, (void *)&GlobalVar);
}
