diff options
author | Tom de Vries <tom@codesourcery.com> | 2011-11-02 18:01:18 +0000 |
---|---|---|
committer | Tom de Vries <vries@gcc.gnu.org> | 2011-11-02 18:01:18 +0000 |
commit | 742e5233b8cd28b4ca3dc677b47566c2cc8000b7 (patch) | |
tree | c7f23780097a72c8fe06e1111aca3303aa8bc18d /gcc | |
parent | f58abe3caaff23b174e857e013243afa573aac4d (diff) | |
download | gcc-742e5233b8cd28b4ca3dc677b47566c2cc8000b7.zip gcc-742e5233b8cd28b4ca3dc677b47566c2cc8000b7.tar.gz gcc-742e5233b8cd28b4ca3dc677b47566c2cc8000b7.tar.bz2 |
re PR tree-optimization/50763 (ICE: verify_gimple failed: missing PHI def with -ftree-tail-merge)
2011-11-02 Tom de Vries <tom@codesourcery.com>
PR tree-optimization/50763
* g++.dg/pr50763-3.C: New test.
From-SVN: r180785
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/pr50763-3.C | 57 |
2 files changed, 62 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cbb10da..057fd7c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2011-11-02 Tom de Vries <tom@codesourcery.com> + PR tree-optimization/50763 + * g++.dg/pr50763-3.C: New test. + +2011-11-02 Tom de Vries <tom@codesourcery.com> + PR tree-optimization/50672 * g++.dg/pr50672.C: New test. diff --git a/gcc/testsuite/g++.dg/pr50763-3.C b/gcc/testsuite/g++.dg/pr50763-3.C new file mode 100644 index 0000000..b66be87 --- /dev/null +++ b/gcc/testsuite/g++.dg/pr50763-3.C @@ -0,0 +1,57 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target ilp32 } */ +/* { dg-options "-O2 -ftree-tail-merge" } */ + +class v2d { +public: + double x; + double y; +}; + +class v3d { +public: + double x; + v3d() {} + v3d(const v2d & cr2Dv) {} +}; + +class e2d { +protected: + v2d _Min; + v2d _Max; +public: + int cop2d(const v2d & rPnt) const; + v2d clp2d(const v2d & rPnt) const; +}; + +inline int e2d::cop2d(const v2d & rPnt) const { + int bRet = 1; + if (rPnt.x < _Min.x) bRet = 0; + else if (rPnt.x > _Max.x) bRet = 0; + else if (rPnt.y > _Max.y) bRet = 0; + return bRet; +} + +inline v2d e2d::clp2d(const v2d & rPnt) const { + v2d sRet = rPnt; + if (rPnt.x < _Min.x) sRet.x = _Min.x; + if (rPnt.y < _Min.y) sRet.y = _Min.y; + if (rPnt.x > _Max.x) sRet.x = _Max.x; + if (rPnt.y > _Max.y) sRet.y = _Max.y; + return sRet; +} + +class sExt { +protected: + e2d _Dom; + long eval() const; + long evalPoint(const v2d & crUV, v3d & rPnt) const; +}; + +long sExt::evalPoint(const v2d & crUV, v3d & rPnt) const { + v3d sUV = crUV; + if (!_Dom.cop2d(crUV)) { + sUV = _Dom.clp2d(crUV); + } + eval(); +} |