xref: /aosp_15_r20/external/clang/test/Index/complete-macro-args.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
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 Li void 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 Li void 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