diff options
| author | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2018-11-29 17:54:26 +0100 |
|---|---|---|
| committer | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2018-12-14 13:57:56 +0100 |
| commit | 137813ac795cd6b9f987afea7aec59100c3d311e (patch) | |
| tree | 8e4f036002813aad2078e26457dadca09a686bba /validation | |
| parent | 6f9b33b07bb8e82d410bd74b0389a0ca391bde7e (diff) | |
| download | sparse-dev-137813ac795cd6b9f987afea7aec59100c3d311e.tar.gz | |
teach sparse about asm inline
GCC's trunk now allows to specifiy 'inline' with asm statements.
This feature has been asked by kernel devs and will most probably
by used for the kernel.
So, teach sparse about this syntax too.
Note: for sparse, there is no semantic associated to this inline
because sparse doesn't make any size-based inlining decisions.
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Diffstat (limited to 'validation')
| -rw-r--r-- | validation/asm-inline.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/validation/asm-inline.c b/validation/asm-inline.c new file mode 100644 index 00000000..186286b3 --- /dev/null +++ b/validation/asm-inline.c @@ -0,0 +1,52 @@ +static void foo(void) +{ + asm(""); + asm volatile ("v"); + asm inline ("i"); + asm volatile inline ("vi"); + asm inline volatile ("iv"); + + asm goto ("g" :::: label); + asm volatile goto ("vg" :::: label); + asm inline goto ("ig" :::: label); + asm volatile inline goto ("vig" :::: label); + asm inline volatile goto ("ivg" :::: label); + + asm goto volatile ("gv" :::: label); + asm goto inline ("gi" :::: label); + asm goto volatile inline ("gvi" :::: label); + asm goto inline volatile ("giv" :::: label); + asm volatile goto inline ("vgi" :::: label); + asm inline goto volatile ("giv" :::: label); + + // warn on duplicates + asm volatile volatile ("vv"); + asm inline inline ("ii"); + asm goto goto ("gg" :::: label); + + asm inline volatile inline ("ivi"); + asm inline goto inline ("igi" :::: label); + asm goto inline goto ("gig" :::: label); + asm goto volatile goto ("gvg" :::: label); + asm volatile inline volatile ("viv"); + asm volatile goto volatile ("vgv" :::: label); + +label: + ; +} + +/* + * check-name: asm-inline + * + * check-error-start +asm-inline.c:23:22: warning: duplicated asm modifier +asm-inline.c:24:20: warning: duplicated asm modifier +asm-inline.c:25:18: warning: duplicated asm modifier +asm-inline.c:27:29: warning: duplicated asm modifier +asm-inline.c:28:25: warning: duplicated asm modifier +asm-inline.c:29:25: warning: duplicated asm modifier +asm-inline.c:30:27: warning: duplicated asm modifier +asm-inline.c:31:29: warning: duplicated asm modifier +asm-inline.c:32:27: warning: duplicated asm modifier + * check-error-end + */ |
