xref: /illumos-gate/usr/src/tools/smatch/src/validation/asm-inline.c (revision 1da57d551424de5a9d469760be7c4b4d4f10a755)
1 static void foo(void)
2 {
3 	asm("");
4 	asm volatile ("v");
5 	asm inline ("i");
6 	asm volatile inline ("vi");
7 	asm inline volatile ("iv");
8 
9 	asm goto ("g" :::: label);
10 	asm volatile goto ("vg" :::: label);
11 	asm inline goto ("ig" :::: label);
12 	asm volatile inline goto ("vig" :::: label);
13 	asm inline volatile goto ("ivg" :::: label);
14 
15 	asm goto volatile ("gv" :::: label);
16 	asm goto inline ("gi" :::: label);
17 	asm goto volatile inline ("gvi" :::: label);
18 	asm goto inline volatile ("giv" :::: label);
19 	asm volatile goto inline ("vgi" :::: label);
20 	asm inline goto volatile ("giv" :::: label);
21 
22 	// warn on duplicates
23 	asm volatile volatile ("vv");
24 	asm inline inline ("ii");
25 	asm goto goto ("gg" :::: label);
26 
27 	asm inline volatile inline ("ivi");
28 	asm inline goto inline ("igi" :::: label);
29 	asm goto inline goto ("gig" :::: label);
30 	asm goto volatile goto ("gvg" :::: label);
31 	asm volatile inline volatile ("viv");
32 	asm volatile goto volatile ("vgv" :::: label);
33 
34 label:
35 	;
36 }
37 
38 /*
39  * check-name: asm-inline
40  *
41  * check-error-start
42 asm-inline.c:23:22: warning: duplicated asm modifier
43 asm-inline.c:24:20: warning: duplicated asm modifier
44 asm-inline.c:25:18: warning: duplicated asm modifier
45 asm-inline.c:27:29: warning: duplicated asm modifier
46 asm-inline.c:28:25: warning: duplicated asm modifier
47 asm-inline.c:29:25: warning: duplicated asm modifier
48 asm-inline.c:30:27: warning: duplicated asm modifier
49 asm-inline.c:31:29: warning: duplicated asm modifier
50 asm-inline.c:32:27: warning: duplicated asm modifier
51  * check-error-end
52  */
53