Mercurial > hg > CbC > CbC_gcc
diff gcc/testsuite/g++.dg/torture/pr68852.C @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | |
children | 84e7813d76e9 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gcc/testsuite/g++.dg/torture/pr68852.C Fri Oct 27 22:46:09 2017 +0900 @@ -0,0 +1,51 @@ +/* { dg-do compile } */ + +struct A { + double x, y, z, w; + A() {} + A(double, double p2, double p3, double) : y(p2), z(p3) {} + void m_fn1(); +}; + +struct B { + double x, y; +}; +struct D : A { + D() {} + D(double p1, double p2, double p3, double p4) : A(p1, p2, p3, p4) {} +}; + +class C { +public: + float _11, _12, _13, _14; + float _21, _22, _23, _24; + float _31, _32, _33, _34; + float _41, _42, _43, _44; + D m_fn2(B p1) { + double z(p1.x + _43); + return *this * D(p1.x, p1.y, z, 1); + } + int ProjectRectBounds_next; + B __trans_tmp_3; + int m_fn3(int) { + B a, b; + D c[1]; + b = __trans_tmp_3; + c[2] = m_fn2(b); + c[3] = m_fn2(a); + c[ProjectRectBounds_next].m_fn1(); + } + D operator*(D p1) { + D d; + d.x = p1.x * _11 + p1.y * _21 + p1.z * _31 + _41; + d.y = p1.x * _12 + p1.y * _22 + p1.z * _32 + _42; + d.z = p1.x * _13 + p1.y * _23 + p1.z * _33 + _43; + d.w = p1.x * _14 + p1.y * _24 + p1.z * _34 + _44; + return d; + } +}; + +void fn1() { + C e; + int f = e.m_fn3(f); +}