36 lines · c
1// RUN: %clang_cc1 -std=c89 -verify %s2// RUN: %clang_cc1 -std=c99 -verify %s3// RUN: %clang_cc1 -std=c11 -verify %s4// RUN: %clang_cc1 -std=c17 -verify %s5// RUN: %clang_cc1 -std=c23 -verify %s6 7// expected-no-diagnostics8 9/* WG14 ???: yes10 * new block scopes for selection and iteration statements11 *12 * This is referenced in the C99 front matter as new changes to C99, but it is13 * not clear which document number introduced the changes. It's possible this14 * is WG14 N759, based on discussion in the C99 rationale document that claims15 * these changes were made in response to surprising issues with the lifetime16 * of compound literals in compound statements vs non-compound statements.17 */18 19enum {a, b};20void different(void) {21 if (sizeof(enum {b, a}) != sizeof(int)) {22 _Static_assert(a == 1, "");23 }24 /* In C89, the 'b' found here would have been from the enum declaration in25 * the controlling expression of the selection statement, not from the global26 * declaration. In C99 and later, that enumeration is scoped to the 'if'27 * statement and the global declaration is what's found.28 */29 #if __STDC_VERSION__ >= 199901L30 _Static_assert(b == 1, "");31 #else32 _Static_assert(b == 0, "");33 #endif34}35 36