| // 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, ""); |