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