diff options
author | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
---|---|---|
committer | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
commit | 554fd8c5195424bdbcabf5de30fdc183aba391bd (patch) | |
tree | 976dc5ab7fddf506dadce60ae936f43f58787092 /gcc/testsuite/g++.dg/tree-ssa/pr27894.C | |
download | cbb-gcc-4.6.4-upstream.tar.bz2 cbb-gcc-4.6.4-upstream.tar.xz |
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig;
imported gcc-4.6.4 source tree from verified upstream tarball.
downloading a git-generated archive based on the 'upstream' tag
should provide you with a source tree that is binary identical
to the one extracted from the above tarball.
if you have obtained the source via the command 'git clone',
however, do note that line-endings of files in your working
directory might differ from line-endings of the respective
files in the upstream repository.
Diffstat (limited to 'gcc/testsuite/g++.dg/tree-ssa/pr27894.C')
-rw-r--r-- | gcc/testsuite/g++.dg/tree-ssa/pr27894.C | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr27894.C b/gcc/testsuite/g++.dg/tree-ssa/pr27894.C new file mode 100644 index 000000000..ac97a35f1 --- /dev/null +++ b/gcc/testsuite/g++.dg/tree-ssa/pr27894.C @@ -0,0 +1,82 @@ +// PR c++/27894 +// { dg-do compile } +// { dg-options "-O" } + +class A; +struct B +{ + B (unsigned long); + int b2 () const; + A *b1 () const; +}; + +enum { P = 0 }; +enum O { Q = 75, }; +class C; +struct D { A *d; }; +struct E +{ + B e1 (int) const; + A *e2 (const B &) const; + D e3[4096]; +}; + +inline A * +E::e2 (const B & x) const +{ + const D *w = &e3[x.b2 ()]; + return (A *) w->d; +} + +extern E *e; + +inline A * +B::b1 () const +{ + extern E *e; + return e->e2 (*this); +} + +template <class T> struct F : public B +{ + F (const B &); + T *b1 () const; +}; + +template < class T > inline T * F <T>::b1 () const +{ + return (T *) B::b1 (); +}; + +typedef F <C> N; + +class G {}; +class H : public G {}; +class I : public H {}; +class J {}; +class K {}; +struct L +{ + void l (J *, C *, int, const char *, O); +}; +class M : public K, public I +{ + void m (J &, int, const char *); + void m (J &, int, int, const char *, float); +}; + +void +M::m (J &x, int y, const char *z) +{ + L *w = new L; + N v = e->e1 (y); + w->l (&x, v.b1 (), P, z, Q); +} + +void +M::m (J &x, int y, int s, const char *z, float t) +{ + L *w = new L; + N v = e->e1 (y); + w->l (&x, v.b1 (), s, z, (O) (int) ((t) ? (50 + 20 / (float) t) : 0)); +} |