| // RUN: %clang_cc1 -verify -std=c23 %s |
| // RUN: %clang_cc1 -verify=pedantic -std=c11 -pedantic %s |
| // RUN: %clang_cc1 -verify=compat -std=c23 -Wpre-c23-compat %s |
| |
| // expected-no-diagnostics |
| |
| /* WG14 N2508: yes |
| * Free positioning of labels inside compound statements |
| */ |
| void test(void) { |
| { |
| inner: |
| } /* pedantic-warning {{label at end of compound statement is a C23 extension}} |
| compat-warning {{label at end of compound statement is incompatible with C standards before C23}} |
| */ |
| |
| switch (1) { |
| case 1: |
| } /* pedantic-warning {{label at end of compound statement is a C23 extension}} |
| compat-warning {{label at end of compound statement is incompatible with C standards before C23}} |
| */ |
| |
| { |
| multiple: labels: on: a: line: |
| } /* pedantic-warning {{label at end of compound statement is a C23 extension}} |
| compat-warning {{label at end of compound statement is incompatible with C standards before C23}} |
| */ |
| |
| final: |
| } /* pedantic-warning {{label at end of compound statement is a C23 extension}} |
| compat-warning {{label at end of compound statement is incompatible with C standards before C23}} |
| */ |
| |
| void test_labels(void) { |
| label: |
| int i = 0; /* pedantic-warning {{label followed by a declaration is a C23 extension}} |
| compat-warning {{label followed by a declaration is incompatible with C standards before C23}} |
| */ |
| |
| switch (i) { |
| case 1: |
| _Static_assert(1, ""); /* pedantic-warning {{label followed by a declaration is a C23 extension}} |
| compat-warning {{label followed by a declaration is incompatible with C standards before C23}} |
| */ |
| default: |
| _Static_assert(1, ""); /* pedantic-warning {{label followed by a declaration is a C23 extension}} |
| compat-warning {{label followed by a declaration is incompatible with C standards before C23}} |
| */ |
| } |
| } |