diff options
Diffstat (limited to 'gcc/testsuite/g++.dg/opt/pr39607.C')
-rw-r--r-- | gcc/testsuite/g++.dg/opt/pr39607.C | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/opt/pr39607.C b/gcc/testsuite/g++.dg/opt/pr39607.C new file mode 100644 index 00000000000..c39260dc5ea --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr39607.C @@ -0,0 +1,65 @@ +// PR rtl-optimization/39607 +// { dg-do compile } +// { dg-options "-O2" } + +void abcErrorMessage(int error); +enum AbcSurfType { + SURF_U, + SURF_V +}; +class AbcVec2d +{ +public: + double x; + double y; +}; +class AbcIval1d +{ +protected: + double m_dMin; + double m_dMax; +public: + AbcIval1d(); + AbcIval1d(double dMin, double dMax); + double GetMax() const { return m_dMax; } + double GetMin() const { return m_dMin; } +}; +inline AbcIval1d::AbcIval1d(double dMin, double dMax) +{ + if (dMin > dMax) { + abcErrorMessage(1); + } + else { + m_dMin = dMin; + m_dMax = dMax; + } +} +class AbcIval2d +{ +protected: + AbcVec2d m_vMin; + AbcVec2d m_vMax; +public: + AbcVec2d GetMax() const { return m_vMax; } + AbcVec2d GetMin() const { return m_vMin; } +}; +class AbcCone +{ +protected: + int m_uv; +public: + AbcIval2d GetNaturalUVDomain() const; + AbcIval1d GetLinearParamIval(AbcSurfType * pSurfParam) const; +}; +AbcIval1d AbcCone::GetLinearParamIval(AbcSurfType * pSurfParam) const +{ + AbcIval1d sIval; + AbcIval2d sUVDomain = GetNaturalUVDomain(); + if (m_uv) { + sIval = AbcIval1d(sUVDomain.GetMin().x,sUVDomain.GetMax().x); + } + else { + sIval = AbcIval1d(sUVDomain.GetMin().y,sUVDomain.GetMax().y); + } + return sIval; +} |