aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTom de Vries <tom@codesourcery.com>2011-11-02 18:01:18 +0000
committerTom de Vries <vries@gcc.gnu.org>2011-11-02 18:01:18 +0000
commit742e5233b8cd28b4ca3dc677b47566c2cc8000b7 (patch)
treec7f23780097a72c8fe06e1111aca3303aa8bc18d /gcc
parentf58abe3caaff23b174e857e013243afa573aac4d (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/pr50763-3.C57
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();
+}