struct Point { float x; float y; float z; }; #define MACRO2(x) x #define MACRO(x) MACRO2(x) void test(struct Point *p) { p->x; MACRO(p->x); } #define MACRO3(x,y,z) x;y;z void test2(struct Point *p) { MACRO3(p->x); MACRO3(p->x } #define FM(x) x void test3(struct Point *p) { FM(p->x, a); } #define VGM(...) 0 #define VGM2(...) __VA_ARGS__ // These need to be last, to test proper handling of EOF. #ifdef EOF_TEST1 void test3(struct Point *p) { VGM(1,2, p->x #elif EOF_TEST2 void test3(struct Point *p) { VGM2(VGM(1,2, p->x #endif // RUN: c-index-test -code-completion-at=%s:11:12 %s | FileCheck %s // RUN: c-index-test -code-completion-at=%s:12:12 %s | FileCheck %s // RUN: c-index-test -code-completion-at=%s:18:13 %s | FileCheck %s // RUN: c-index-test -code-completion-at=%s:19:13 %s | FileCheck %s // RUN: c-index-test -code-completion-at=%s:24:9 %s | FileCheck %s // CHECK: FieldDecl:{ResultType float}{TypedText x} (35) // CHECK-NEXT: FieldDecl:{ResultType float}{TypedText y} (35) // CHECK-NEXT: FieldDecl:{ResultType float}{TypedText z} (35) // CHECK-NEXT: Completion contexts: // CHECK-NEXT: Arrow member access // CHECK-NEXT: Container Kind: StructDecl // With these, code-completion is unknown because the macro argument (and the // completion point) is not expanded by the macro definition. // RUN: c-index-test -code-completion-at=%s:33:15 %s -DEOF_TEST1 | FileCheck %s -check-prefix=CHECK-EOF // RUN: c-index-test -code-completion-at=%s:37:20 %s -DEOF_TEST2 | FileCheck %s -check-prefix=CHECK-EOF // CHECK-EOF: Completion contexts: // CHECK-EOF: Unknown