xref: /llvm-project/clang/test/Preprocessor/macro_arg_directive.c (revision 023dd1eefad3c3b41633e0644df2e0d29f66d728)
1eb3ce7c3SRichard Smith // RUN: %clang_cc1 %s -fsyntax-only -verify
2eb3ce7c3SRichard Smith 
35edd5830SRichard Smith #define a(x) enum { x }
45edd5830SRichard Smith a(n =
55edd5830SRichard Smith #undef a
65edd5830SRichard Smith #define a 5
75edd5830SRichard Smith   a);
85edd5830SRichard Smith _Static_assert(n == 5, "");
95edd5830SRichard Smith 
10f2d3bc04SDavid Majnemer #define M(A)
11*023dd1eeSNico Weber M( // expected-note {{expansion of macro 'M' requested here}}
12f2d3bc04SDavid Majnemer #pragma pack(pop) // expected-error {{embedding a #pragma directive within macro arguments is not supported}}
13f2d3bc04SDavid Majnemer )
14f2d3bc04SDavid Majnemer 
15eb3ce7c3SRichard Smith // header1.h
16eb3ce7c3SRichard Smith void fail(const char *);
17eb3ce7c3SRichard Smith #define MUNCH(...) \
18eb3ce7c3SRichard Smith  ({ int result = 0; __VA_ARGS__; if (!result) { fail(#__VA_ARGS__); }; result })
19eb3ce7c3SRichard Smith 
f(int k)20eb3ce7c3SRichard Smith static inline int f(int k) {
21*023dd1eeSNico Weber   return MUNCH( // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{returning 'void'}} expected-note {{expansion of macro 'MUNCH' requested here}}
22eb3ce7c3SRichard Smith     if (k < 3)
23eb3ce7c3SRichard Smith       result = 24;
24eb3ce7c3SRichard Smith     else if (k > 4)
25eb3ce7c3SRichard Smith       result = k - 4;
26eb3ce7c3SRichard Smith }
27eb3ce7c3SRichard Smith 
28eb3ce7c3SRichard Smith #include "macro_arg_directive.h" // expected-error {{embedding a #include directive within macro arguments is not supported}}
29eb3ce7c3SRichard Smith 
30eb3ce7c3SRichard Smith int g(int k) {
31eb3ce7c3SRichard Smith   return f(k) + f(k-1));
32eb3ce7c3SRichard Smith }
33