[clang] Handle __declspec() attributes in using
[llvm-project.git] / clang / test / CodeGen / callback_annotated.c
blob173b9d275d55685cd2cd96ab1a59ac7f00f830f3
1 // RUN: %clang_cc1 -triple i386-unknown-unknown -fopenmp %s -emit-llvm -o - -disable-llvm-optzns | FileCheck %s --check-prefix=RUN1
3 // RUN1-DAG: @broker0({{[^#]*#[0-9]+}} !callback ![[cid0:[0-9]+]]
4 __attribute__((callback(1, 2))) void *broker0(void *(*callee)(void *), void *payload) {
5 return callee(payload);
8 // RUN1-DAG: @broker1({{[^#]*#[0-9]+}} !callback ![[cid1:[0-9]+]]
9 __attribute__((callback(callee, payload))) void *broker1(void *payload, void *(*callee)(void *)) {
10 return broker0(callee, payload);
13 void *broker2(void (*callee)(void));
15 // RUN1-DAG: declare !callback ![[cid2:[0-9]+]] ptr @broker2
16 __attribute__((callback(callee))) void *broker2(void (*callee)(void));
18 void *broker2(void (*callee)(void));
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);
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);
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);
29 static void *VoidPtr2VoidPtr(void *payload) {
30 return payload;
33 static int ThreeInt2Int(int a, int b, int c) {
34 return a * b + c;
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);
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}