mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-15 14:01:04 +08:00
[multiple changes]
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. From-SVN: r109883
This commit is contained in:
parent
b2f39494f9
commit
656032b8c1
@ -1,3 +1,20 @@
|
||||
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
|
||||
|
@ -1,6 +1,6 @@
|
||||
// -*- 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
|
||||
@ -94,16 +94,13 @@ struct it_value_type_traits_
|
||||
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
|
||||
@ -114,7 +111,7 @@ struct it_value_type_traits_
|
||||
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
|
||||
@ -125,7 +122,7 @@ struct it_value_type_traits_
|
||||
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);
|
||||
|
||||
@ -135,9 +132,9 @@ struct it_value_type_traits_
|
||||
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);
|
||||
}
|
||||
@ -185,16 +182,13 @@ struct it_value_type_traits_<
|
||||
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
|
||||
@ -205,7 +199,7 @@ struct it_value_type_traits_<
|
||||
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
|
||||
@ -216,7 +210,7 @@ struct it_value_type_traits_<
|
||||
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);
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
// -*- 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
|
||||
@ -51,6 +51,7 @@
|
||||
#include <ext/pb_assoc/detail/type_utils.hpp>
|
||||
#include <utility>
|
||||
#include <algorithm>
|
||||
#include <tr1/type_traits> // for aligned_storage/alignment_of
|
||||
|
||||
namespace pb_assoc
|
||||
{
|
||||
|
@ -1,5 +1,6 @@
|
||||
// -*- 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.
|
||||
//
|
||||
@ -49,7 +50,7 @@ using std::memcpy;
|
||||
// -- 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;
|
||||
|
@ -1,5 +1,6 @@
|
||||
// -*- 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.
|
||||
//
|
||||
@ -34,6 +35,16 @@
|
||||
#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
|
||||
@ -81,7 +92,7 @@ eh_globals_dtor(void* ptr)
|
||||
_Unwind_DeleteException(&exn->unwindHeader);
|
||||
exn = next;
|
||||
}
|
||||
std::free(ptr);
|
||||
free(ptr);
|
||||
}
|
||||
}
|
||||
|
||||
@ -125,7 +136,7 @@ __cxxabiv1::__cxa_get_globals() throw()
|
||||
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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user