175f6cd2bSArgyrios Kyrtzidis struct Point { 275f6cd2bSArgyrios Kyrtzidis float x; 375f6cd2bSArgyrios Kyrtzidis float y; 475f6cd2bSArgyrios Kyrtzidis float z; 575f6cd2bSArgyrios Kyrtzidis }; 675f6cd2bSArgyrios Kyrtzidis 775f6cd2bSArgyrios Kyrtzidis #define MACRO2(x) x 875f6cd2bSArgyrios Kyrtzidis #define MACRO(x) MACRO2(x) 975f6cd2bSArgyrios Kyrtzidis test(struct Point * p)1075f6cd2bSArgyrios Kyrtzidisvoid test(struct Point *p) { 1175f6cd2bSArgyrios Kyrtzidis p->x; 1275f6cd2bSArgyrios Kyrtzidis MACRO(p->x); 1375f6cd2bSArgyrios Kyrtzidis } 1475f6cd2bSArgyrios Kyrtzidis 15d4635d48SArgyrios Kyrtzidis #define MACRO3(x,y,z) x;y;z 16c1d9a67eSArgyrios Kyrtzidis test2(struct Point * p)179fd1571eSArgyrios Kyrtzidisvoid test2(struct Point *p) { 18c1d9a67eSArgyrios Kyrtzidis MACRO3(p->x); 19c1d9a67eSArgyrios Kyrtzidis MACRO3(p->x 20c1d9a67eSArgyrios Kyrtzidis } 21c1d9a67eSArgyrios Kyrtzidis 22*fb70380fSArgyrios Kyrtzidis #define FM(x) x 23*fb70380fSArgyrios Kyrtzidis void test3(struct Point *p) { 24*fb70380fSArgyrios Kyrtzidis FM(p->x, a); 25*fb70380fSArgyrios Kyrtzidis } 26*fb70380fSArgyrios Kyrtzidis 279fd1571eSArgyrios Kyrtzidis #define VGM(...) 0 289fd1571eSArgyrios Kyrtzidis #define VGM2(...) __VA_ARGS__ 299fd1571eSArgyrios Kyrtzidis 309fd1571eSArgyrios Kyrtzidis // These need to be last, to test proper handling of EOF. 319fd1571eSArgyrios Kyrtzidis #ifdef EOF_TEST1 329fd1571eSArgyrios Kyrtzidis void test3(struct Point *p) { 339fd1571eSArgyrios Kyrtzidis VGM(1,2, p->x 349fd1571eSArgyrios Kyrtzidis 359fd1571eSArgyrios Kyrtzidis #elif EOF_TEST2 369fd1571eSArgyrios Kyrtzidis void test3(struct Point *p) { 379fd1571eSArgyrios Kyrtzidis VGM2(VGM(1,2, p->x 389fd1571eSArgyrios Kyrtzidis 399fd1571eSArgyrios Kyrtzidis #endif 409fd1571eSArgyrios Kyrtzidis 4175f6cd2bSArgyrios Kyrtzidis // RUN: c-index-test -code-completion-at=%s:11:12 %s | FileCheck %s 4275f6cd2bSArgyrios Kyrtzidis // RUN: c-index-test -code-completion-at=%s:12:12 %s | FileCheck %s 43c1d9a67eSArgyrios Kyrtzidis // RUN: c-index-test -code-completion-at=%s:18:13 %s | FileCheck %s 44c1d9a67eSArgyrios Kyrtzidis // RUN: c-index-test -code-completion-at=%s:19:13 %s | FileCheck %s 45*fb70380fSArgyrios Kyrtzidis // RUN: c-index-test -code-completion-at=%s:24:9 %s | FileCheck %s 4675f6cd2bSArgyrios Kyrtzidis // CHECK: FieldDecl:{ResultType float}{TypedText x} (35) 4775f6cd2bSArgyrios Kyrtzidis // CHECK-NEXT: FieldDecl:{ResultType float}{TypedText y} (35) 4875f6cd2bSArgyrios Kyrtzidis // CHECK-NEXT: FieldDecl:{ResultType float}{TypedText z} (35) 4975f6cd2bSArgyrios Kyrtzidis // CHECK-NEXT: Completion contexts: 5075f6cd2bSArgyrios Kyrtzidis // CHECK-NEXT: Arrow member access 5175f6cd2bSArgyrios Kyrtzidis // CHECK-NEXT: Container Kind: StructDecl 529fd1571eSArgyrios Kyrtzidis 539fd1571eSArgyrios Kyrtzidis // With these, code-completion is unknown because the macro argument (and the 549fd1571eSArgyrios Kyrtzidis // completion point) is not expanded by the macro definition. 55*fb70380fSArgyrios Kyrtzidis // RUN: c-index-test -code-completion-at=%s:33:15 %s -DEOF_TEST1 | FileCheck %s -check-prefix=CHECK-EOF 56*fb70380fSArgyrios Kyrtzidis // RUN: c-index-test -code-completion-at=%s:37:20 %s -DEOF_TEST2 | FileCheck %s -check-prefix=CHECK-EOF 579fd1571eSArgyrios Kyrtzidis // CHECK-EOF: Completion contexts: 589fd1571eSArgyrios Kyrtzidis // CHECK-EOF: Unknown 59