1struct Point {
2  float x;
3  float y;
4  float z;
5};
6
7#define MACRO2(x) x
8#define MACRO(x) MACRO2(x)
9
10void test(struct Point *p) {
11        p->x;
12  MACRO(p->x);
13}
14
15#define MACRO3(x,y,z) x;y;z
16
17void test2(struct Point *p) {
18  MACRO3(p->x);
19  MACRO3(p->x
20}
21
22#define FM(x) x
23void 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
32void test3(struct Point *p) {
33  VGM(1,2, p->x
34
35#elif EOF_TEST2
36void 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