From 742e5233b8cd28b4ca3dc677b47566c2cc8000b7 Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Wed, 2 Nov 2011 18:01:18 +0000 Subject: [PATCH] re PR tree-optimization/50763 (ICE: verify_gimple failed: missing PHI def with -ftree-tail-merge) 2011-11-02 Tom de Vries PR tree-optimization/50763 * g++.dg/pr50763-3.C: New test. From-SVN: r180785 --- gcc/testsuite/ChangeLog | 5 +++ gcc/testsuite/g++.dg/pr50763-3.C | 57 ++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 gcc/testsuite/g++.dg/pr50763-3.C diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cbb10dab604..057fd7c5973 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-11-02 Tom de Vries + + PR tree-optimization/50763 + * g++.dg/pr50763-3.C: New test. + 2011-11-02 Tom de Vries PR tree-optimization/50672 diff --git a/gcc/testsuite/g++.dg/pr50763-3.C b/gcc/testsuite/g++.dg/pr50763-3.C new file mode 100644 index 00000000000..b66be87b1b8 --- /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(); +}