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