1 | struct Point { |
2 | float x; |
3 | float y; |
4 | float z; |
5 | }; |
6 | |
7 | #define MACRO2(x) x |
8 | #define MACRO(x) MACRO2(x) |
9 | |
10 | void test(struct Point *p) { |
11 | p->x; |
12 | MACRO(p->x); |
13 | } |
14 | |
15 | #define MACRO3(x,y,z) x;y;z |
16 | |
17 | void test2(struct Point *p) { |
18 | MACRO3(p->x); |
19 | MACRO3(p->x |
20 | } |
21 | |
22 | #define FM(x) x |
23 | void test3(struct Point *p) { |
24 | FM(p->x, a); |
25 | } |
26 | |
27 | #define VGM(...) 0 |
28 | #define VGM2(...) __VA_ARGS__ |
29 | |
30 | // These need to be last, to test proper handling of EOF. |
31 | #ifdef EOF_TEST1 |
32 | void test3(struct Point *p) { |
33 | VGM(1,2, p->x |
34 | |
35 | #elif EOF_TEST2 |
36 | void test3(struct Point *p) { |
37 | VGM2(VGM(1,2, p->x |
38 | |
39 | #endif |
40 | |
41 | // RUN: c-index-test -code-completion-at=%s:11:12 %s | FileCheck %s |
42 | // RUN: c-index-test -code-completion-at=%s:12:12 %s | FileCheck %s |
43 | // RUN: c-index-test -code-completion-at=%s:18:13 %s | FileCheck %s |
44 | // RUN: c-index-test -code-completion-at=%s:19:13 %s | FileCheck %s |
45 | // RUN: c-index-test -code-completion-at=%s:24:9 %s | FileCheck %s |
46 | // CHECK: FieldDecl:{ResultType float}{TypedText x} (35) |
47 | // CHECK-NEXT: FieldDecl:{ResultType float}{TypedText y} (35) |
48 | // CHECK-NEXT: FieldDecl:{ResultType float}{TypedText z} (35) |
49 | // CHECK-NEXT: Completion contexts: |
50 | // CHECK-NEXT: Arrow member access |
51 | // CHECK-NEXT: Container Kind: StructDecl |
52 | |
53 | // With these, code-completion is unknown because the macro argument (and the |
54 | // completion point) is not expanded by the macro definition. |
55 | // RUN: c-index-test -code-completion-at=%s:33:15 %s -DEOF_TEST1 | FileCheck %s -check-prefix=CHECK-EOF |
56 | // RUN: c-index-test -code-completion-at=%s:37:20 %s -DEOF_TEST2 | FileCheck %s -check-prefix=CHECK-EOF |
57 | // CHECK-EOF: Completion contexts: |
58 | // CHECK-EOF: Unknown |
59 | |