aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/g++.dg/torture/pr34641.C
diff options
context:
space:
mode:
authorBen Cheng <bccheng@google.com>2014-03-25 22:37:19 -0700
committerBen Cheng <bccheng@google.com>2014-03-25 22:37:19 -0700
commit1bc5aee63eb72b341f506ad058502cd0361f0d10 (patch)
treec607e8252f3405424ff15bc2d00aa38dadbb2518 /gcc-4.9/gcc/testsuite/g++.dg/torture/pr34641.C
parent283a0bf58fcf333c58a2a92c3ebbc41fb9eb1fdb (diff)
downloadtoolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.gz
toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.bz2
toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.zip
Initial checkin of GCC 4.9.0 from trunk (r208799).
Change-Id: I48a3c08bb98542aa215912a75f03c0890e497dba
Diffstat (limited to 'gcc-4.9/gcc/testsuite/g++.dg/torture/pr34641.C')
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/torture/pr34641.C177
1 files changed, 177 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/torture/pr34641.C b/gcc-4.9/gcc/testsuite/g++.dg/torture/pr34641.C
new file mode 100644
index 000000000..0cf507762
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/torture/pr34641.C
@@ -0,0 +1,177 @@
+// { dg-do compile }
+// { dg-require-effective-target fpic }
+// { dg-require-visibility "" }
+// { dg-options "-fPIC" }
+
+
+typedef __SIZE_TYPE__ size_t;
+extern "C" void *
+malloc (size_t __size)
+throw () __attribute__ ((__malloc__));
+ namespace std __attribute__ ((__visibility__ ("default")))
+{
+ using::size_t;
+}
+inline void *operator
+new (std::size_t, void *__p)
+throw ()
+{
+ return __p;
+}
+template < class _T1, class _T2 > struct pair
+{
+ _T1 first;
+ _T2 second;
+ pair (const _T1 & __a, const _T2 & __b):first (__a), second (__b)
+ {
+ }
+ template < class _U1, class _U2 >
+ pair (const pair < _U1, _U2 > &__p):first (__p.first), second (__p.second)
+ {
+ }
+};
+
+template < class _T1, class _T2 >
+ inline pair < _T1, _T2 > make_pair (_T1 __x, _T2 __y)
+{
+ return pair < _T1, _T2 > (__x, __y);
+}
+template < typename _Tp > inline const _Tp &
+max (const _Tp & __a, const _Tp & __b)
+{
+}
+typedef unsigned short int uint16_t;
+typedef unsigned long int uintptr_t;
+typedef uint16_t UChar;
+namespace std __attribute__ ((__visibility__ ("default")))
+{
+ struct __numeric_limits_base
+ {
+ };
+ template < typename _Tp > struct numeric_limits:public __numeric_limits_base
+ {
+ static _Tp max () throw ()
+ {
+ }
+ };
+}
+
+template < typename T > class VectorBufferBase
+{
+public:
+ void allocateBuffer (size_t newCapacity)
+ {
+ if (newCapacity > std::numeric_limits < size_t >::max () / sizeof (T))
+ *(int *) (uintptr_t) 0xbbadbeef = 0;
+ }
+};
+
+template < typename T, size_t inlineCapacity > class VectorBuffer;
+template < typename T > class VectorBuffer < T, 0 >:private VectorBufferBase <
+ T >
+{
+public:
+ typedef VectorBufferBase < T > Base;
+ using Base::allocateBuffer;
+};
+
+template < typename T, size_t inlineCapacity = 0 > class Vector
+{
+ typedef VectorBuffer < T, inlineCapacity > Impl;
+public:
+ typedef T *iterator;
+ size_t size () const
+ {
+ return m_size;
+ }
+ size_t capacity () const
+ {
+ }
+ iterator begin ()
+ {
+ }
+ iterator end ()
+ {
+ return begin () + m_size;
+ }
+ void shrink (size_t size);
+ void reserveCapacity (size_t newCapacity);
+ void clear ()
+ {
+ shrink (0);
+ }
+ template < typename U > void append (const U &);
+ void expandCapacity (size_t newMinCapacity);
+ template < typename U > U * expandCapacity (size_t newMinCapacity, U *);
+ size_t m_size;
+ Impl m_impl;
+};
+template < typename T, size_t inlineCapacity >
+ void Vector < T, inlineCapacity >::expandCapacity (size_t newMinCapacity)
+{
+ reserveCapacity (max
+ (newMinCapacity,
+ max (static_cast < size_t > (16),
+ capacity () + capacity () / 4 + 1)));
+}
+
+template < typename T, size_t inlineCapacity >
+ template < typename U >
+ inline U * Vector < T,
+ inlineCapacity >::expandCapacity (size_t newMinCapacity, U * ptr)
+{
+ expandCapacity (newMinCapacity);
+}
+template < typename T, size_t inlineCapacity >
+ void Vector < T, inlineCapacity >::reserveCapacity (size_t newCapacity)
+{
+ m_impl.allocateBuffer (newCapacity);
+}
+template < typename T, size_t inlineCapacity >
+ template < typename U >
+ inline void Vector < T, inlineCapacity >::append (const U & val)
+{
+ const U *ptr = &val;
+ if (size () == capacity ())
+ ptr = expandCapacity (size () + 1, ptr);
+ new (end ())T (*ptr);
+}
+
+class Range;
+class TextIterator
+{
+public:
+ explicit TextIterator (const Range *,
+ bool emitCharactersBetweenAllVisiblePositions =
+ false);
+ bool atEnd () const
+ {
+ }
+ void advance ();
+ int length () const
+ {
+ }
+};
+UChar *
+plainTextToMallocAllocatedBuffer (const Range * r, unsigned &bufferLength)
+{
+ static const unsigned cMaxSegmentSize = 1 << 16;
+ typedef pair < UChar *, unsigned >TextSegment;
+ Vector < TextSegment > *textSegments = 0;
+ Vector < UChar > textBuffer;
+ for (TextIterator it (r); !it.atEnd (); it.advance ())
+ {
+ if (textBuffer.size ()
+ && textBuffer.size () + it.length () > cMaxSegmentSize)
+ {
+ UChar *newSegmentBuffer =
+ static_cast <
+ UChar * >(malloc (textBuffer.size () * sizeof (UChar)));
+ if (!textSegments)
+ textSegments = new Vector < TextSegment >;
+ textSegments->
+ append (make_pair (newSegmentBuffer, textBuffer.size ()));
+ textBuffer.clear ();
+ }
+ }
+}