xref: /llvm-project/clang/test/Index/complete-macro-args.c (revision fb70380f2f4d546c5ac37bb5bb98ad2c46810c41)
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 Kyrtzidis void 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 Kyrtzidis void 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