082-22.locale.stdcxx-554.cpp.patch revision 402
402N/A--- stdcxx-4.2.1/tests/regress/22.locale.stdcxx-554.cpp 2008-04-24 20:23:26.000000000 -0400
402N/A+++ stdcxx-4.2.1/tests/regress/22.locale.stdcxx-554.cpp 2011-02-20 02:06:59.971275876 -0500
402N/A@@ -29,26 +29,27 @@
402N/A
402N/A #include <locale> // for std::moneypunct, std::messages
402N/A
402N/A-enum { fill = '\xdc' };
402N/A+unsigned char filler = '\xdc';
402N/A
402N/A template <class charT>
402N/A void test_moneypunct (charT)
402N/A {
402N/A typedef std::moneypunct <charT> PunctT;
402N/A
402N/A- // Use a pointer to properly align buffer for placment new.
402N/A+ // Align on 8 because that covers all the cases we care about.
402N/A union {
402N/A- void* ptr;
402N/A- char buf [sizeof (PunctT) + 1];
402N/A+ unsigned long long pad;
402N/A+ unsigned char buf [sizeof (PunctT) + 1];
402N/A } u;
402N/A
402N/A- std::memset (u.buf, fill, sizeof (u.buf));
402N/A+ std::memset (u.buf, filler, sizeof (u.buf));
402N/A
402N/A PunctT* p = new (u.buf) PunctT ();
402N/A
402N/A- assert (fill == u.buf [sizeof (PunctT)]);
402N/A+ assert (filler == u.buf [sizeof (PunctT)]);
402N/A
402N/A- p->~PunctT ();
402N/A+ // we can't explicitly call the destructor any longer
402N/A+ // because it is protected.
402N/A }
402N/A
402N/A template <class charT>
402N/A@@ -57,17 +58,18 @@
402N/A typedef std::messages <charT> MessagesT;
402N/A
402N/A union {
402N/A- void* ptr;
402N/A- char buf [sizeof (MessagesT) + 1];
402N/A+ unsigned long long pad;
402N/A+ unsigned char buf [sizeof (MessagesT) + 1];
402N/A } u;
402N/A
402N/A- std::memset (u.buf, fill, sizeof (u.buf));
402N/A+ std::memset (u.buf, filler, sizeof (u.buf));
402N/A
402N/A MessagesT* p = new (u.buf) MessagesT ();
402N/A
402N/A- assert (fill == u.buf [sizeof (MessagesT)]);
402N/A+ assert (filler == u.buf [sizeof (MessagesT)]);
402N/A
402N/A- p->~MessagesT ();
402N/A+ // we can't explicitly call the destructor any longer
402N/A+ // because it is protected.
402N/A }
402N/A
402N/A int main (int, char* [])
402N/A@@ -82,3 +84,4 @@
402N/A
402N/A return 0;
402N/A }
402N/A+