Skip to content

Commit edfa97a

Browse files
committed
[C99] Claim conformance to "new block scopes for selection and iteration statements"
I was unable to definitively locate a document number for this, but it is potentially WG14 N759 based on the description in the C99 rationale document. We do implement the C89 and C99 scope rules for iteration and selection statements, so claiming conformance here.
1 parent ce37a71 commit edfa97a

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

clang/test/C/C99/block-scopes.c

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// RUN: %clang_cc1 -std=c89 -verify %s
2+
// RUN: %clang_cc1 -std=c99 -verify %s
3+
// RUN: %clang_cc1 -std=c11 -verify %s
4+
// RUN: %clang_cc1 -std=c17 -verify %s
5+
// RUN: %clang_cc1 -std=c23 -verify %s
6+
7+
// expected-no-diagnostics
8+
9+
/* WG14 ???: yes
10+
* new block scopes for selection and iteration statements
11+
*
12+
* This is referenced in the C99 front matter as new changes to C99, but it is
13+
* not clear which document number introduced the changes. It's possible this
14+
* is WG14 N759, based on discussion in the C99 rationale document that claims
15+
* these changes were made in response to surprising issues with the lifetime
16+
* of compound literals in compound statements vs non-compound statements.
17+
*/
18+
19+
enum {a, b};
20+
void different(void) {
21+
if (sizeof(enum {b, a}) != sizeof(int))
22+
_Static_assert(a == 1, "");
23+
/* In C89, the 'b' found here would have been from the enum declaration in
24+
* the controlling expression of the selection statement, not from the global
25+
* declaration. In C99 and later, that enumeration is scoped to the 'if'
26+
* statement and the global declaration is what's found.
27+
*/
28+
#if __STDC_VERSION__ >= 199901L
29+
_Static_assert(b == 1, "");
30+
#else
31+
_Static_assert(b == 0, "");
32+
#endif
33+
}
34+

clang/www/c_status.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ <h2 id="c99">C99 implementation status</h2>
260260
<tr>
261261
<td>new block scopes for selection and iteration statements</td>
262262
<td>Unknown</td>
263-
<td class="unknown" align="center">Unknown</td>
263+
<td class="full" align="center">Yes</td>
264264
</tr>
265265
<tr>
266266
<td>integer constant type rules</td>

0 commit comments

Comments
 (0)