llvm-project/clang/test/Preprocessor/macro_arg_directive.c
Richard Smith 5edd5830e1 Make preprocessor act in a GCC-compatible fashion when a macro is redefined
within its own argument list. The original definition is used for the immediate
expansion, but the new definition is used for any subsequent occurences within
the argument list or after the expansion.

llvm-svn: 162906
2012-08-30 13:38:46 +00:00

28 lines
672 B
C

// RUN: %clang_cc1 %s -fsyntax-only -verify
#define a(x) enum { x }
a(n =
#undef a
#define a 5
a);
_Static_assert(n == 5, "");
// header1.h
void fail(const char *);
#define MUNCH(...) \
({ int result = 0; __VA_ARGS__; if (!result) { fail(#__VA_ARGS__); }; result })
static inline int f(int k) {
return MUNCH( // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{returning 'void'}}
if (k < 3)
result = 24;
else if (k > 4)
result = k - 4;
}
#include "macro_arg_directive.h" // expected-error {{embedding a #include directive within macro arguments is not supported}}
int g(int k) {
return f(k) + f(k-1));
}