summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/torture/pr45393.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.dg/torture/pr45393.C')
-rw-r--r--gcc/testsuite/g++.dg/torture/pr45393.C38
1 files changed, 38 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/torture/pr45393.C b/gcc/testsuite/g++.dg/torture/pr45393.C
new file mode 100644
index 000000000..5bf16b034
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr45393.C
@@ -0,0 +1,38 @@
+// { dg-do compile }
+
+class FloatPoint;
+class Path {
+public:
+ ~Path();
+ void moveTo(const FloatPoint&);
+ static void createEllipse(const FloatPoint& center, float rx, float ry);
+};
+extern "C" {
+ extern float cosf (float);
+ extern float sinf (float);
+}
+const float piFloat = static_cast<float>(3.14159265358979323846);
+class FloatPoint {
+public:
+ FloatPoint(float x, float y) : m_x(x), m_y(y) { }
+ float x() const;
+ float y() const;
+ float m_x, m_y;
+};
+void Path::createEllipse(const FloatPoint& center, float rx, float ry)
+{
+ float cx = center.x();
+ float cy = center.y();
+ Path path;
+ float x = cx;
+ float y = cy;
+ unsigned step = 0, num = 100;
+ while (1) {
+ float angle = static_cast<float>(step) / num * 2.0f * piFloat;
+ x = cx + cosf(angle) * rx;
+ y = cy + sinf(angle) * ry;
+ step++;
+ if (step == 1)
+ path.moveTo(FloatPoint(x, y));
+ }
+}