* declarations after a case statement
@ 2026-06-04 13:40 Dan Carpenter
2026-06-04 13:48 ` Dan Carpenter
0 siblings, 1 reply; 5+ messages in thread
From: Dan Carpenter @ 2026-06-04 13:40 UTC (permalink / raw)
To: linux-sparse
Sparse doesn't let you declare a variable immediately after a case
statement but that's something we do in the kernel these days. The
"b" declaration is fine, but "c" generates a warning.
regards,
dan carpenter
$ ./sparse test.c
test.c:10:17: error: typename in expression
test.c:10:21: error: Expected ; at end of statement
test.c:10:21: error: got c
test.c:10:17: error: undefined identifier 'int'
$
#include <stdio.h>
void func(int a)
{
switch (a) {
case 1:
printf("hello\n");
int b;
case 2:
int c;
}
}
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: declarations after a case statement
2026-06-04 13:40 declarations after a case statement Dan Carpenter
@ 2026-06-04 13:48 ` Dan Carpenter
2026-06-04 14:21 ` Derek M Jones
0 siblings, 1 reply; 5+ messages in thread
From: Dan Carpenter @ 2026-06-04 13:48 UTC (permalink / raw)
To: linux-sparse
Same thing for declaration after after a label.
$ ./smatch test.c
test.c:5:9: error: typename in expression
test.c:5:14: error: Expected ; at end of statement
test.c:5:14: error: got b
test.c:5 func() warn: statement has no effect 'char'
void func(int a)
{
goto out;
out:
char b;
b = 1;
}
regards,
dan carpenter
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: declarations after a case statement
2026-06-04 13:48 ` Dan Carpenter
@ 2026-06-04 14:21 ` Derek M Jones
2026-06-05 5:50 ` Dan Carpenter
0 siblings, 1 reply; 5+ messages in thread
From: Derek M Jones @ 2026-06-04 14:21 UTC (permalink / raw)
To: linux-sparse
Dan
> Same thing for declaration after after a label.
Sparse is correct. The usage you describe is a syntax error.
A label may only appear on a statement, not a
declaration
https://c0x.shape-of-code.com/6.8.1.html
> $ ./smatch test.c
> test.c:5:9: error: typename in expression
> test.c:5:14: error: Expected ; at end of statement
> test.c:5:14: error: got b
> test.c:5 func() warn: statement has no effect 'char'
>
> void func(int a)
> {
> goto out;
> out:
> char b;
> b = 1;
> }
--
Derek M. Jones Evidence-based software engineering
blog:https://shape-of-code.com
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: declarations after a case statement
2026-06-04 14:21 ` Derek M Jones
@ 2026-06-05 5:50 ` Dan Carpenter
2026-06-05 10:43 ` Derek M Jones
0 siblings, 1 reply; 5+ messages in thread
From: Dan Carpenter @ 2026-06-05 5:50 UTC (permalink / raw)
To: Derek M Jones; +Cc: linux-sparse
On Thu, Jun 04, 2026 at 03:21:00PM +0100, Derek M Jones wrote:
> Dan
>
> > Same thing for declaration after after a label.
>
> Sparse is correct. The usage you describe is a syntax error.
>
> A label may only appear on a statement, not a
> declaration
> https://c0x.shape-of-code.com/6.8.1.html
>
That's an awkward thing because GCC allows it and the kernel is
doing it.
net/mac80211/mesh_hwmp.c +373
switch (action) {
case MPATH_PREQ:
struct ieee80211_mesh_hwmp_preq_top *preq_elem_top =
(void *)hwmp_ie;
struct ieee80211_mesh_hwmp_preq_bottom *preq_elem_bottom =
ieee80211_mesh_hwmp_preq_get_bottom(hwmp_ie);
orig_addr = preq_elem_top->orig_addr;
regards,
dan carpenter
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: declarations after a case statement
2026-06-05 5:50 ` Dan Carpenter
@ 2026-06-05 10:43 ` Derek M Jones
0 siblings, 0 replies; 5+ messages in thread
From: Derek M Jones @ 2026-06-05 10:43 UTC (permalink / raw)
To: Dan Carpenter; +Cc: linux-sparse
Dan,
>> Sparse is correct. The usage you describe is a syntax error.
>>
>> A label may only appear on a statement, not a
>> declaration
>> https://c0x.shape-of-code.com/6.8.1.html
>>
>
> That's an awkward thing because GCC allows it and the kernel is
> doing it.
Double checked. I'm out of date. C23 supports the labeling of declarations
6.8.2p4
Any statement or declaration in a compound statement can be preceded by a prefix
that declares an identifier as a label name.
Sorry for confusion.
--
Derek M. Jones Evidence-based software engineering
blog:https://shape-of-code.com
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-06-05 12:11 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-04 13:40 declarations after a case statement Dan Carpenter
2026-06-04 13:48 ` Dan Carpenter
2026-06-04 14:21 ` Derek M Jones
2026-06-05 5:50 ` Dan Carpenter
2026-06-05 10:43 ` Derek M Jones
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox