brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.2 KiB · 116e5d9 Raw
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