xref: /llvm-project/clang/test/CodeGen/callback_annotated.c (revision 39db5e1ed87363a9ffea81e53520b542201b3262)
1 // RUN: %clang_cc1 -triple i386-unknown-unknown -fopenmp %s -emit-llvm -o - -disable-llvm-optzns | FileCheck %s --check-prefix=RUN1
2 
3 // RUN1-DAG: @broker0({{[^#]*#[0-9]+}} !callback ![[cid0:[0-9]+]]
broker0(void * (* callee)(void *),void * payload)4 __attribute__((callback(1, 2))) void *broker0(void *(*callee)(void *), void *payload) {
5   return callee(payload);
6 }
7 
8 // RUN1-DAG: @broker1({{[^#]*#[0-9]+}} !callback ![[cid1:[0-9]+]]
broker1(void * payload,void * (* callee)(void *))9 __attribute__((callback(callee, payload))) void *broker1(void *payload, void *(*callee)(void *)) {
10   return broker0(callee, payload);
11 }
12 
13 void *broker2(void (*callee)(void));
14 
15 // RUN1-DAG: declare !callback ![[cid2:[0-9]+]] ptr @broker2
16 __attribute__((callback(callee))) void *broker2(void (*callee)(void));
17 
18 void *broker2(void (*callee)(void));
19 
20 // RUN1-DAG: declare !callback ![[cid3:[0-9]+]] ptr @broker3
21 __attribute__((callback(4, 1, 2, c))) void *broker3(int, int, int c, int (*callee)(int, int, int), int);
22 
23 // RUN1-DAG: declare !callback ![[cid4:[0-9]+]] ptr @broker4
24 __attribute__((callback(4, -1, a, __))) void *broker4(int a, int, int, int (*callee)(int, int, int), int);
25 
26 // RUN1-DAG: declare !callback ![[cid5:[0-9]+]] ptr @broker5
27 __attribute__((callback(4, d, 5, 2))) void *broker5(int, int, int, int (*callee)(int, int, int), int d);
28 
VoidPtr2VoidPtr(void * payload)29 static void *VoidPtr2VoidPtr(void *payload) {
30   return payload;
31 }
32 
ThreeInt2Int(int a,int b,int c)33 static int ThreeInt2Int(int a, int b, int c) {
34   return a * b + c;
35 }
36 
foo(void)37 void foo(void) {
38   broker0(VoidPtr2VoidPtr, 0l);
39   broker1(0l, VoidPtr2VoidPtr);
40   broker2(foo);
41   broker3(1, 4, 5, ThreeInt2Int, 1);
42   broker4(4, 2, 7, ThreeInt2Int, 0);
43   broker5(8, 0, 3, ThreeInt2Int, 4);
44 }
45 
46 // RUN1-DAG: ![[cid0]] = !{![[cid0b:[0-9]+]]}
47 // RUN1-DAG: ![[cid0b]] = !{i64 0, i64 1, i1 false}
48 // RUN1-DAG: ![[cid1]] = !{![[cid1b:[0-9]+]]}
49 // RUN1-DAG: ![[cid1b]] = !{i64 1, i64 0, i1 false}
50 // RUN1-DAG: ![[cid2]] = !{![[cid2b:[0-9]+]]}
51 // RUN1-DAG: ![[cid2b]] = !{i64 0, i1 false}
52 // RUN1-DAG: ![[cid3]] = !{![[cid3b:[0-9]+]]}
53 // RUN1-DAG: ![[cid3b]] = !{i64 3, i64 0, i64 1, i64 2, i1 false}
54 // RUN1-DAG: ![[cid4]] = !{![[cid4b:[0-9]+]]}
55 // RUN1-DAG: ![[cid4b]] = !{i64 3, i64 -1, i64 0, i64 -1, i1 false}
56 // RUN1-DAG: ![[cid5]] = !{![[cid5b:[0-9]+]]}
57 // RUN1-DAG: ![[cid5b]] = !{i64 3, i64 4, i64 4, i64 1, i1 false}
58