2008-05-15  Farid Zaripov  <farid_zaripov@epam.com>

	Merged from branches/4.2.x.

	2008-05-15  Farid Zaripov  <farid_zaripov@epam.com>
	* include/rw/_mutex.h: Set size of __rw_critical_section equal to 40 on _WIN64.


	2008-05-05  Martin Sebor  <sebor@roguewave.com>
	STDCXX-911
	* include/rw/_mutex.h [6 == _RWSTD_HP_aCC_MAJOR]: Suppressed HP aCC
	aCC 6 remarks: 64 bit migration: conversion from long* to "int* may
	cause target of pointers to have a different size.


git-svn-id: https://svn.apache.org/repos/asf/stdcxx/trunk@656632 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/include/rw/_mutex.h b/include/rw/_mutex.h
index 2d9c096..ff2f0fd 100644
--- a/include/rw/_mutex.h
+++ b/include/rw/_mutex.h
@@ -156,7 +156,12 @@
 // fake critical section type
 union __rw_critical_section {
     long _C_pad;   // force alignment
+
+#    ifndef _WIN64
     char _C_buf [24 /* == sizeof (_RTL_CRITICAL_SECTION) */];
+#    else    // #ifdef _WIN64
+    char _C_buf [40 /* == sizeof (_RTL_CRITICAL_SECTION) */];
+#    endif   // _WIN64
 };
 
 #    define _RWSTD_MUTEX_T _RW::__rw_critical_section
@@ -1936,6 +1941,14 @@
 
 #if _RWSTD_LONG_SIZE == _RWSTD_INT_SIZE
 
+#  if 6 == _RWSTD_HP_aCC_MAJOR
+     // suppress HP aCC 64 bit migration remark: conversion from
+     // "long *" to "int *" may cause target of pointers to have
+     // a different size
+#    pragma diag_suppress 4230
+#  endif   // HP aCC 6
+
+
 inline long
 __rw_atomic_preincrement (long &__x, bool)
 {
@@ -1981,6 +1994,11 @@
                                  false);
 }
 
+
+#  if 6 == _RWSTD_HP_aCC_MAJOR
+#    pragma diag_default 4230
+#  endif   // HP aCC 6
+
 #endif   // _RWSTD_LONG_SIZE == _RWSTD_INT_SIZE
 
 /********************** generic long long functions *******************/