xref: /llvm-project/clang/test/C/C99/n570.c (revision 4746877c2716224dc87c69750bdd0df95b6d5b16)
1 // RUN: %clang_cc1 -verify -std=c99 %s
2 // RUN: %clang_cc1 -E -std=c99 %s | FileCheck %s
3 // expected-no-diagnostics
4 
5 /* WG14 N570: Yes
6  * Empty macro arguments
7  *
8  * NB: the original paper is not available online anywhere, so the test
9  * coverage is coming from what could be gleaned from the C99 rationale
10  * document. In C89, it was UB to pass no arguments to a function-like macro,
11  * and that's now supported in C99.
12  */
13 
14 #define TEN 10
15 #define U u
16 #define I // expands into no preprocessing tokens
17 #define L L
18 #define glue(a, b) a ## b
19 #define xglue(a, b) glue(a, b)
20 
21 const unsigned u = xglue(TEN, U);
22 const int i = xglue(TEN, I);
23 const long l = xglue(TEN, L);
24 
25 // CHECK: const unsigned u = 10u;
26 // CHECK-NEXT: const int i = 10;
27 // CHECK-NEXT: const long l = 10L;
28 
29 _Static_assert(u == 10U, "");
30 _Static_assert(i == 10, "");
31 _Static_assert(l == 10L, "");
32