aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/validation
diff options
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2018-11-29 17:54:26 +0100
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2018-12-14 13:57:56 +0100
commit137813ac795cd6b9f987afea7aec59100c3d311e (patch)
tree8e4f036002813aad2078e26457dadca09a686bba /validation
parent6f9b33b07bb8e82d410bd74b0389a0ca391bde7e (diff)
downloadsparse-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.c52
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
+ */