| void foo(void) |
| { |
| void *p = &&l; |
| { |
| l: ; |
| } |
| goto *p; // OK |
| } |
| |
| void bar(void) |
| { |
| void *p = &&l; // KO: 'jump' inside |
| ({ |
| l: 1; |
| }); |
| goto *p; |
| } |
| |
| void baz(void) |
| { |
| void *p = &&l; // KO: 'jump' inside |
| 0 ? 1 : ({ |
| l: 1; |
| }); |
| goto *p; |
| } |
| |
| void qux(void) |
| { |
| void *p = &&l; // KO: 'jump' inside + removed |
| 1 ? 1 : ({ |
| l: 1; |
| }); |
| goto *p; |
| } |
| |
| void quz(void) |
| { |
| void *p; |
| p = &&l; // KO: undeclared |
| goto *p; |
| } |
| |
| void qxu(void) |
| { |
| void *p; |
| ({ |
| l: 1; |
| }); |
| p = &&l; // KO: 'jump' inside |
| goto *p; |
| } |
| |
| void qzu(void) |
| { |
| void *p; |
| 1 ? 1 : ({ |
| l: 1; |
| }); |
| p = &&l; // KO: 'jump' inside + removed |
| goto *p; |
| } |
| |
| |
| /* |
| * check-name: label-scope-cgoto |
| * check-command: sparse -Wno-decl $file |
| * |
| * check-error-start |
| label-scope-cgoto.c:12:19: error: label 'l' used outside statement expression |
| label-scope-cgoto.c:14:1: label 'l' defined here |
| label-scope-cgoto.c:21:19: error: label 'l' used outside statement expression |
| label-scope-cgoto.c:23:1: label 'l' defined here |
| label-scope-cgoto.c:30:19: error: label 'l' used outside statement expression |
| label-scope-cgoto.c:32:1: label 'l' defined here |
| label-scope-cgoto.c:50:13: error: label 'l' used outside statement expression |
| label-scope-cgoto.c:48:1: label 'l' defined here |
| label-scope-cgoto.c:60:13: error: label 'l' used outside statement expression |
| label-scope-cgoto.c:58:1: label 'l' defined here |
| label-scope-cgoto.c:40:13: error: label 'l' was not declared |
| * check-error-end |
| */ |