summaryrefslogtreecommitdiff
path: root/libmudflap/testsuite/libmudflap.c/pass53-frag.c
diff options
context:
space:
mode:
Diffstat (limited to 'libmudflap/testsuite/libmudflap.c/pass53-frag.c')
-rw-r--r--libmudflap/testsuite/libmudflap.c/pass53-frag.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/libmudflap/testsuite/libmudflap.c/pass53-frag.c b/libmudflap/testsuite/libmudflap.c/pass53-frag.c
new file mode 100644
index 00000000000..6afb2931e34
--- /dev/null
+++ b/libmudflap/testsuite/libmudflap.c/pass53-frag.c
@@ -0,0 +1,41 @@
+int foo1 ()
+{
+ union { int l; char c[sizeof (int)]; } k1;
+ char *m;
+ k1.l = 0;
+ /* This test variant triggers ADDR_EXPR of k explicitly in order to
+ ensure it's registered with the runtime. */
+ m = k1.c;
+ k1.c [sizeof (int)-1] = m[sizeof (int)-2];
+}
+
+int foo2 ()
+{
+ union { int l; char c[sizeof (int)]; } k2;
+ k2.l = 0;
+ /* Since this access is known-in-range, k need not be registered
+ with the runtime, but then this access better not be instrumented
+ either. */
+ k2.c [sizeof (int)-1] ++;
+ return k2.l;
+}
+
+int foo3idx = sizeof (int)-1;
+
+int foo3 ()
+{
+ union { int l; char c[sizeof (int)]; } k3;
+ k3.l = 0;
+ /* NB this test uses foo3idx, an extern variable, to defeat mudflap
+ known-in-range-index optimizations. */
+ k3.c [foo3idx] ++;
+ return k3.l;
+}
+
+int main ()
+{
+ foo1 ();
+ foo2 ();
+ foo3 ();
+ return 0;
+}