diff mbox

c++98/mt_allcoator.cc: Fix assumption sizeof(void *) == sizeof(size_t)

Message ID 54662972.7020106@oarcorp.com
State New
Headers show

Commit Message

Joel Sherrill Nov. 14, 2014, 4:10 p.m. UTC
Attached is an updated version of the patch which includes
some commentary above the include of stdint.h.

Is this OK to apply?

--joel

On 11/10/2014 1:03 PM, Paolo Carlini wrote:
> Hi,
>
> On 11/10/2014 07:34 PM, Jonathan Wakely wrote:
>> On 10/11/14 12:01 -0600, Joel Sherrill wrote:
>>> cc'ing since both lists should be included.
>>>
>>> The m32c has 24-bit pointers and 16-bit size_t. This changes
>>> pushing a pointer through a size_t to pushing it through a
>>> uintptr_t.
>> I'm OK with this change if Paolo is.
> No problem with the experiment (frankly, I'm not at all sure that the 
> targets not providing <stdint.h> are *that* much uncommon than the 
> target which we are fixing with the patch), but please add a comment 
> about <stdint.h> in the code, then if bootstrap actually breaks the 
> issue is clear...
>
> Paolo.

Comments

Jonathan Wakely Nov. 14, 2014, 4:37 p.m. UTC | #1
On 14/11/14 10:10 -0600, Joel Sherrill wrote:
>Attached is an updated version of the patch which includes
>some commentary above the include of stdint.h.
>
>Is this OK to apply?

OK, thanks.
Joel Sherrill Nov. 14, 2014, 4:57 p.m. UTC | #2
On 11/14/2014 10:37 AM, Jonathan Wakely wrote:
> On 14/11/14 10:10 -0600, Joel Sherrill wrote:
>> Attached is an updated version of the patch which includes
>> some commentary above the include of stdint.h.
>>
>> Is this OK to apply?
> OK, thanks.
Committed. Thanks for all the feedback.
diff mbox

Patch

From d1468be689dc23e39209b5cc981d00e89a465673 Mon Sep 17 00:00:00 2001
From: Joel Sherrill <joel.sherrill@oarcorp.com>
Date: Mon, 10 Nov 2014 09:34:15 -0600
Subject: [PATCH] c++98/mt_allcoator.cc: Fix assumption sizeof(void *) ==
 sizeof(size_t)

2014-11-14  Joel Sherrill <joel.sherrill@oarcorp.com>

	* src/c++98/mt_allocator.cc: Fix assumption that sizeof(void *) is
	equal to sizeof(size_t). The m32c breaks this assumption.
---
 libstdc++-v3/src/c++98/mt_allocator.cc | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/libstdc++-v3/src/c++98/mt_allocator.cc b/libstdc++-v3/src/c++98/mt_allocator.cc
index 38e17df..51b2605 100644
--- a/libstdc++-v3/src/c++98/mt_allocator.cc
+++ b/libstdc++-v3/src/c++98/mt_allocator.cc
@@ -31,6 +31,11 @@ 
 #include <ext/mt_allocator.h>
 #include <cstring>
 
+// The include file is needed for uintptr_t. If this file does not compile,
+// check to make sure the target has <stdint.h> and that it provides
+// uintptr_t.
+#include <stdint.h>
+
 namespace
 {
 #ifdef __GTHREADS
@@ -74,7 +79,7 @@  namespace
     __freelist& freelist = get_freelist();
     {
       __gnu_cxx::__scoped_lock sentry(get_freelist_mutex());
-      size_t _M_id = reinterpret_cast<size_t>(__id);
+      uintptr_t _M_id = reinterpret_cast<uintptr_t>(__id);
       
       typedef __gnu_cxx::__pool<true>::_Thread_record _Thread_record;
       _Thread_record* __tr = &freelist._M_thread_freelist_array[_M_id - 1];
@@ -627,7 +632,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
       {
 	__freelist& freelist = get_freelist();
 	void* v = __gthread_getspecific(freelist._M_key);
-	size_t _M_id = (size_t)v;
+	uintptr_t _M_id = (uintptr_t)v;
 	if (_M_id == 0)
 	  {
 	    {
-- 
1.9.3