aboutsummaryrefslogtreecommitdiffstats
path: root/test/regression/volatile3.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/regression/volatile3.c')
-rw-r--r--test/regression/volatile3.c77
1 files changed, 77 insertions, 0 deletions
diff --git a/test/regression/volatile3.c b/test/regression/volatile3.c
new file mode 100644
index 00000000..2999609a
--- /dev/null
+++ b/test/regression/volatile3.c
@@ -0,0 +1,77 @@
+/* Expansion of read-modify-write operations on volatiles */
+
+#include <stdio.h>
+
+volatile int x;
+volatile unsigned char c;
+
+int main()
+{
+ x = 0;
+ printf("x = %d\n", x);
+
+ x++;
+ printf("x = %d\n", x);
+ printf ("x++ = %d\n", x++);
+ printf("x = %d\n", x);
+
+ x += 42;
+ printf("x = %d\n", x);
+ printf ("x += 12 = %d\n", x += 12);
+ printf("x = %d\n", x);
+
+ x--;
+ printf("x = %d\n", x);
+ printf ("x-- = %d\n", x--);
+ printf("x = %d\n", x);
+
+ x -= 7;
+ printf("x = %d\n", x);
+ printf ("x -= 3 = %d\n", x -= 3);
+ printf("x = %d\n", x);
+
+ ++x;
+ printf("x = %d\n", x);
+ printf ("++x = %d\n", ++x);
+ printf("x = %d\n", x);
+
+ --x;
+ printf("x = %d\n", x);
+ printf ("--x = %d\n", --x);
+ printf("x = %d\n", x);
+
+ c = 0;
+ printf("c = %d\n", c);
+
+ c++;
+ printf("c = %d\n", c);
+ printf ("c++ = %d\n", c++);
+ printf("c = %d\n", c);
+
+ c += 250;
+ printf("c = %d\n", c);
+ printf ("c += 42 = %d\n", c += 42);
+ printf("c = %d\n", c);
+
+ c--;
+ printf("c = %d\n", c);
+ printf ("c-- = %d\n", c--);
+ printf("c = %d\n", c);
+
+ c -= 7;
+ printf("c = %d\n", c);
+ printf ("c -= 3 = %d\n", c -= 3);
+ printf("c = %d\n", c);
+
+ ++c;
+ printf("c = %d\n", c);
+ printf ("++c = %d\n", ++c);
+ printf("c = %d\n", c);
+
+ --c;
+ printf("c = %d\n", c);
+ printf ("--c = %d\n", --c);
+ printf("c = %d\n", c);
+
+ return 0;
+}