From 554fd8c5195424bdbcabf5de30fdc183aba391bd Mon Sep 17 00:00:00 2001 From: upstream source tree Date: Sun, 15 Mar 2015 20:14:05 -0400 Subject: obtained gcc-4.6.4.tar.bz2 from upstream website; verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository. --- gcc/testsuite/g++.dg/opt/memcpy1.C | 79 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 gcc/testsuite/g++.dg/opt/memcpy1.C (limited to 'gcc/testsuite/g++.dg/opt/memcpy1.C') diff --git a/gcc/testsuite/g++.dg/opt/memcpy1.C b/gcc/testsuite/g++.dg/opt/memcpy1.C new file mode 100644 index 000000000..f29134599 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/memcpy1.C @@ -0,0 +1,79 @@ +// PR target/34403 +// Origin: Martin Michlmayr + +// { dg-do compile } +// { dg-options "-O" } + +typedef unsigned char uint8_t; +typedef uint8_t uint8; +__extension__ typedef __SIZE_TYPE__ size_t; +class csVector2 +{ +public:float x; +}; +class csBox2 +{ +}; +struct iBase +{ +}; +struct iClipper2D:public virtual iBase +{ +}; +template < class Class > class scfImplementation:public virtual iBase +{ +}; +template < class Class, class I1 > class scfImplementation1:public +scfImplementation < Class >, + public I1 +{ +}; +class csClipper:public scfImplementation1 < csClipper, iClipper2D > +{ +}; +class csBoxClipper:public csClipper +{ + csBox2 region; + virtual uint8 Clip (csVector2 * InPolygon, size_t InCount, + csVector2 * OutPolygon, size_t & OutCount); +}; +struct StatusOutputNone +{ +}; +namespace CS +{ + template < typename BoxTest, typename StatusOutput > class BoxClipper + { + BoxTest boxTest; + StatusOutput statOut; + const csBox2 & region; + csVector2 *InP; + size_t InV; + csVector2 *OutP; + size_t OutV; + public: BoxClipper (const BoxTest & boxTest, const StatusOutput & statOut, + const csBox2 & region, csVector2 * InP, size_t InV, + csVector2 * OutP):boxTest (boxTest), statOut (statOut), + region (region), InP (InP), InV (InV), OutP (OutP), OutV (-1) + { + } + uint8 Clip () + { + __builtin_memcpy (this->OutP, InP, OutV * sizeof (csVector2)); + } + }; +} +struct BoxTestAll +{ +}; +uint8 +csBoxClipper::Clip (csVector2 * InPolygon, size_t InCount, + csVector2 * OutPolygon, size_t & OutCount) +{ + BoxTestAll b; + StatusOutputNone n; + CS::BoxClipper < BoxTestAll, StatusOutputNone > boxClip (b, n, region, + InPolygon, InCount, + OutPolygon); + uint8 Clipped = boxClip.Clip (); +} -- cgit v1.2.3