From 742e5233b8cd28b4ca3dc677b47566c2cc8000b7 Mon Sep 17 00:00:00 2001
From: Tom de Vries <tom@codesourcery.com>
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  <tom@codesourcery.com>

	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 cbb10dab6046..057fd7c59738 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 000000000000..b66be87b1b88
--- /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();
+}   
-- 
GitLab