]> oss.titaniummirror.com Git - msp430-gcc.git/blobdiff - libmudflap/testsuite/libmudflap.c/pass53-frag.c
Imported gcc-4.4.3
[msp430-gcc.git] / libmudflap / testsuite / libmudflap.c / pass53-frag.c
diff --git a/libmudflap/testsuite/libmudflap.c/pass53-frag.c b/libmudflap/testsuite/libmudflap.c/pass53-frag.c
new file mode 100644 (file)
index 0000000..6afb293
--- /dev/null
@@ -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;
+}