diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cbb10dab60468e394719c75a743cc743424e9364..057fd7c5973855b6fcd7ca89df9360fbc32a2b5a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +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 diff --git a/gcc/testsuite/g++.dg/pr50763-3.C b/gcc/testsuite/g++.dg/pr50763-3.C new file mode 100644 index 0000000000000000000000000000000000000000..b66be87b1b8821087a9e10436ac19baac448c711 --- /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(); +}