diff options
Diffstat (limited to 'gcc/testsuite/g++.dg/opt/crossjump1.C')
-rw-r--r-- | gcc/testsuite/g++.dg/opt/crossjump1.C | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/opt/crossjump1.C b/gcc/testsuite/g++.dg/opt/crossjump1.C new file mode 100644 index 000000000..01abdc071 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/crossjump1.C @@ -0,0 +1,34 @@ +// PR middle-end/21492 +// { dg-do compile } +// { dg-options "-Os" } +// { dg-options "-Os -fPIC" { target fpic } } + +extern char *bar (const char *, const char *); +extern char *baz (char *, const char *); +extern unsigned int fn (const char *); +static const struct C { int i; } k = { 0}; + +struct A +{ + ~A (); +}; + +char * +foo (char *x, const char *y) +{ + A a; + char *c = x; + + if (bar (y, "foo")) + { + baz (c, "foo"); + c += fn ("foo"); + } + else if (bar (y, "bar")) + { + baz (c, "bar"); + c += fn ("bar"); + } + + return x; +} |