// FIXME: pthread_create() definition in Builtins.def 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 -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);
}
