PR libstdc++/25823
PR libstdc++/25824
* libsupc++/eh_alloc.cc: Fix return type of memset declaration.
* libsupc++/eh_globals.cc: If !_GLIBCXX_HOSTED declare malloc and free.
2006-01-18 Paolo Carlini <pcarlini@suse.de>
* include/ext/pb_assoc/detail/value_type_adapter/
value_type_adapter.hpp: Include <tr1/type_traits>.
* include/ext/pb_assoc/detail/value_type_adapter/
it_value_type_traits.hpp (it_value_type_traits_<>::value_type_holder):
Use tr1::aligned_storage and tr1::alignment_of.
(it_value_type_traits_<>::buf_t): Remove.
(it_value_type_traits_<>::make_valid, recast): Adjust.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@109883
138bc75d-0d04-0410-961f-
82ee72b054a4
+2006-01-18 Perry Smith <pedz@easesoftware.net>
+
+ PR libstdc++/25823
+ PR libstdc++/25824
+ * libsupc++/eh_alloc.cc: Fix return type of memset declaration.
+ * libsupc++/eh_globals.cc: If !_GLIBCXX_HOSTED declare malloc and free.
+
+2006-01-18 Paolo Carlini <pcarlini@suse.de>
+
+ * include/ext/pb_assoc/detail/value_type_adapter/
+ value_type_adapter.hpp: Include <tr1/type_traits>.
+ * include/ext/pb_assoc/detail/value_type_adapter/
+ it_value_type_traits.hpp (it_value_type_traits_<>::value_type_holder):
+ Use tr1::aligned_storage and tr1::alignment_of.
+ (it_value_type_traits_<>::buf_t): Remove.
+ (it_value_type_traits_<>::make_valid, recast): Adjust.
+
2006-01-16 Benjamin Kosnik <bkoz@redhat.com>
PR libstdc++/25797
// -*- C++ -*-
-// Copyright (C) 2005 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
value_type>::other::const_pointer
const_pointer;
- typedef
- typename Allocator_::template rebind<
- int* >::other::value_type
- buf_t;
-
struct value_type_holder
{
- buf_t m_a_key_buf[sizeof(key_ref_pair) / sizeof(buf_t) + 1];
+ typename std::tr1::aligned_storage<sizeof(key_ref_pair),
+ std::tr1::alignment_of<key_ref_pair>::value>::type m_a_key_buf;
- buf_t m_a_value_buf[sizeof(value_type) / sizeof(buf_t) + 1];
+ typename std::tr1::aligned_storage<sizeof(value_type),
+ std::tr1::alignment_of<value_type>::value>::type m_a_value_buf;
};
typedef
inline static pointer
recast(value_type_hoder_valerence r_holder)
{
- return reinterpret_cast<pointer>(r_holder.m_a_value_buf);
+ return reinterpret_cast<pointer>(&r_holder.m_a_value_buf);
}
inline static void
void* >::other::value_type
void_pointer;
- void_pointer p_target = r_holder.m_a_key_buf;
+ void_pointer p_target = &r_holder.m_a_key_buf;
new (p_target) key_ref_pair(r_bk, r_val.first);
key_ref_pair_pointer;
key_ref_pair_pointer p_key =
- reinterpret_cast<key_ref_pair_pointer>(r_holder.m_a_key_buf);
+ reinterpret_cast<key_ref_pair_pointer>(&r_holder.m_a_key_buf);
- p_target = r_holder.m_a_value_buf;
+ p_target = &r_holder.m_a_value_buf;
new (p_target) value_type(*p_key, r_val.second);
}
value_type>::other::const_pointer
const_pointer;
- typedef
- typename Allocator_::template rebind<
- int* >::other::value_type
- buf_t;
-
struct value_type_holder
{
- buf_t m_a_key_buf[sizeof(key_ref_pair) / sizeof(buf_t) + 1];
+ typename std::tr1::aligned_storage<sizeof(key_ref_pair),
+ std::tr1::alignment_of<key_ref_pair>::value>::type m_a_key_buf;
- buf_t m_a_value_buf[sizeof(value_type) / sizeof(buf_t) + 1];
+ typename std::tr1::aligned_storage<sizeof(value_type),
+ std::tr1::alignment_of<value_type>::value>::type m_a_value_buf;
};
typedef
inline static pointer
recast(value_type_hoder_valerence r_holder)
{
- return reinterpret_cast<pointer>(r_holder.m_a_value_buf);
+ return reinterpret_cast<pointer>(&r_holder.m_a_value_buf);
}
inline static void
void* >::other::value_type
void_pointer;
- void_pointer p_target = r_holder.m_a_value_buf;
+ void_pointer p_target = &r_holder.m_a_value_buf;
new (p_target) key_ref_pair(r_bk, r_val.first);
}
// -*- C++ -*-
-// Copyright (C) 2005 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
#include <ext/pb_assoc/detail/type_utils.hpp>
#include <utility>
#include <algorithm>
+#include <tr1/type_traits> // for aligned_storage/alignment_of
namespace pb_assoc
{
// -*- C++ -*- Allocate exception objects.
-// Copyright (C) 2001, 2004, 2005 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
+// Free Software Foundation, Inc.
//
// This file is part of GCC.
//
// -- but for now, we assume that they are.
extern "C" void *malloc (std::size_t);
extern "C" void free(void *);
-extern "C" int memset (void *, int, std::size_t);
+extern "C" void *memset (void *, int, std::size_t);
#endif
using namespace __cxxabiv1;
// -*- C++ -*- Manage the thread-local exception globals.
-// Copyright (C) 2001, 2004, 2005 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
+// Free Software Foundation, Inc.
//
// This file is part of GCC.
//
#include "unwind-cxx.h"
#include "bits/gthr.h"
+#if _GLIBCXX_HOSTED
+using std::free;
+using std::malloc;
+#else
+// In a freestanding environment, these functions may not be
+// available -- but for now, we assume that they are.
+extern "C" void *malloc (std::size_t);
+extern "C" void free(void *);
+#endif
+
using namespace __cxxabiv1;
#if _GLIBCXX_HAVE_TLS
_Unwind_DeleteException(&exn->unwindHeader);
exn = next;
}
- std::free(ptr);
+ free(ptr);
}
}
g = static_cast<__cxa_eh_globals*>(__gthread_getspecific(init._M_key));
if (!g)
{
- void* v = std::malloc(sizeof(__cxa_eh_globals));
+ void* v = malloc(sizeof(__cxa_eh_globals));
if (v == 0 || __gthread_setspecific(init._M_key, v) != 0)
std::terminate();
g = static_cast<__cxa_eh_globals*>(v);