1 // RUN: %clang_cc1 %s -S -emit-llvm -o - -disable-llvm-optzns | FileCheck %s
2 
3 // CHECK: declare !callback ![[cid:[0-9]+]] {{.*}}i32 @pthread_create
4 // CHECK: ![[cid]] = !{![[cidb:[0-9]+]]}
5 // CHECK: ![[cidb]] = !{i64 2, i64 3, i1 false}
6 
7 // Taken from test/Analysis/retain-release.m
8 //{
9 struct _opaque_pthread_t {};
10 struct _opaque_pthread_attr_t {};
11 typedef struct _opaque_pthread_t *__darwin_pthread_t;
12 typedef struct _opaque_pthread_attr_t __darwin_pthread_attr_t;
13 typedef __darwin_pthread_t pthread_t;
14 typedef __darwin_pthread_attr_t pthread_attr_t;
15 
16 int pthread_create(pthread_t *, const pthread_attr_t *,
17                    void *(*)(void *), void *);
18 //}
19 
20 const int GlobalVar = 0;
21 
22 static void *callee0(void *payload) {
23   return payload;
24 }
25 
26 static void *callee1(void *payload) {
27   return payload;
28 }
29 
30 void foo() {
31   pthread_t MyFirstThread;
32   pthread_create(&MyFirstThread, 0, callee0, 0);
33 
34   pthread_t MySecondThread;
35   pthread_create(&MySecondThread, 0, callee1, (void *)&GlobalVar);
36 }
37