// RUN: %clang_cc1 -verify -std=c99 %s
// RUN: %clang_cc1 -E -std=c99 %s | FileCheck %s
// expected-no-diagnostics
/* WG14 N570: Yes
* Empty macro arguments
*
* NB: the original paper is not available online anywhere, so the test
* coverage is coming from what could be gleaned from the C99 rationale
* document. In C89, it was UB to pass no arguments to a function-like macro,
* and that's now supported in C99.
*/
#define TEN 10
#define U u
#define I // expands into no preprocessing tokens
#define L L
#define glue(a, b) a ## b
#define xglue(a, b) glue(a, b)
const unsigned u = xglue(TEN, U);
const int i = xglue(TEN, I);
const long l = xglue(TEN, L);
// CHECK: const unsigned u = 10u;
// CHECK-NEXT: const int i = 10;
// CHECK-NEXT: const long l = 10L;
_Static_assert(u == 10U, "");
_Static_assert(i == 10, "");
_Static_assert(l == 10L, "");