diff options
Diffstat (limited to 'libmudflap/testsuite/libmudflap.c/pass53-frag.c')
-rw-r--r-- | libmudflap/testsuite/libmudflap.c/pass53-frag.c | 41 |
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; +} |