You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stdcxx.apache.org by fa...@apache.org on 2008/07/03 12:36:23 UTC

svn commit: r673648 - in /stdcxx/trunk: ./ etc/config/src/ etc/config/windows/ include/ include/rw/ tests/regress/ util/

Author: faridz
Date: Thu Jul  3 03:36:21 2008
New Revision: 673648

URL: http://svn.apache.org/viewvc?rev=673648&view=rev
Log:
2008-07-03  Farid Zaripov  <fa...@apache.org>

	Merged r671433, r671542, r671547, r671833, r671835, r671890,
	r673060, r673067, r673109, r673122, r673125, r673156, r673604
	from 4.2.x branch.


	2008-06-25  Farid Zaripov  <fa...@apache.org>
	STDCXX-969
	* include/fstream.cc (close): Reset input/output sequences to prevent
	any subsequent I/O attempts on closed file.


	2008-06-25  Farid Zaripov  <fa...@epam.com>
	STDCXX-152
	* include/rw/_tree.h (_rb_tree): Rewrite typedefs to allow instantiate
	map and set containers on incomplete type.


	2008-06-25  Farid Zaripov  <fa...@epam.com>
	* include/rw/_mutex.h: #define WIN32_LEAN_AND_MEAN before #including
	<windows.h> to prevent #including unneeded headers, especially
	<winsock.h>, that causes an "WinSock.h has already been included"
	errors when <winsock2.h> has been #included after <rw/_mutex.h>.


	2008-06-26  Farid Zaripov  <fa...@apache.com>
	* tests/regress/23.containers.stdcxx-152.cpp: New regression test for
	STDCXX-152 issue.


	2008-06-26  Farid Zaripov  <fa...@apache.com>
	* tests/regress/23.vector.stdcxx-972.cpp: New regression test for
	STDCXX-972 issue.


	2008-06-26  Farid Zaripov  <fa...@apache.com>
	* tests/regress/27.filebuf.close.stdcxx-969.cpp: New regression test
	for STDCXX-969 issue.


	2008-07-01  Farid Zaripov  <fa...@apache.com>
	STDCXX-339
	* README: Removed description of the outdated
	_RWSTD_NO_INLINE_MEMBER_TEMPLATES config macro.
	* etc/config/src/INLINE_MEMBER_TEMPLATES.cpp:
	Deleted corresponding configuration test.


	2008-07-01  Farid Zaripov  <fa...@apache.com>
	* include/rw/_config-msvcrt.h [_WIN64]: Don't #define
	_RWSTD_NO_FWD_DECLARATIONS since the present forward
	declarations are working fine on _WIN64.
	* include/rw/_mutex.h [_WIN32 && _RWSTD_NO_FWD_DECLARATIONS]:
	Reverted changes from r671547.


	2008-07-01  Farid Zaripov  <fa...@apache.com>
	STDCXX-339
	* etc/config/src/EXTERN_MEMBER_TEMPLATE.cpp: Removed dependency
	on deleted config test. Corrected name of the config macro
	_RWSTD_NO_MEMBER_TEMPLATES. Replaced NO_MEMBER_TEMPLATE to
	NO_MEMBER_TEMPLATES for consistency.
	* etc/config/src/extern_template_imp.cpp: Ditto.
	* etc/config/src/extern_template_imp.h: Removed using of the
	NO_INLINE_MEMBER_TEMPLATE macro. Replaced NO_MEMBER_TEMPLATE to
	NO_MEMBER_TEMPLATES for consistency.
	* etc/config/src/MEMBER_TEMPLATES.cpp: Removed inclusion of the
	deleted config test.


	2008-07-01  Farid Zaripov  <fa...@apache.com>
	* etc/config/src/ATOMIC_OPS.cpp: Restored config test file, deleted
	in rev. 614212.
	* include/rw/_mutex.h: Define new macro _RWSTD_CRITICAL_SECTION
	defined as _CRITICAL_SECTION on gcc/MinGW and _RTL_CRITICAL_SECTION 
	on other Windows compilers.
	[_RWSTD_INTERLOCKED_T && !_MSC_VER] Added declarations of Win32 API
	InterlockedXXX() functions. Added definitions of the inline
	_InterlockedXXX() functions for consistency with MSVC's intinsics.
	Use __try/__except on MSVC (and ICC/Windows) only.


	2008-07-01  Farid Zaripov  <fa...@apache.com>
	* etc/config/windows/configure.wsf (checkArchitecture):
	Corrected regular expression's.
	(checkDependencies): Updated regular expression to find
	the macros, that exactly matches to the required dependency.


	2008-07-01  Farid Zaripov  <fa...@apache.com>
	* etc/config/src/libc_decl.sh: Echo linker's command line as well.


	2008-07-03  Farid Zaripov  <fa...@apache.com>
	* util/gencat.cpp (main): Added code for generating
	message catalogs on MinGW.

Added:
    stdcxx/trunk/etc/config/src/ATOMIC_OPS.cpp
      - copied unchanged from r673122, stdcxx/branches/4.2.x/etc/config/src/ATOMIC_OPS.cpp
    stdcxx/trunk/tests/regress/23.containers.stdcxx-152.cpp
      - copied unchanged from r671833, stdcxx/branches/4.2.x/tests/regress/23.containers.stdcxx-152.cpp
    stdcxx/trunk/tests/regress/23.vector.stdcxx-972.cpp
      - copied unchanged from r671835, stdcxx/branches/4.2.x/tests/regress/23.vector.stdcxx-972.cpp
    stdcxx/trunk/tests/regress/27.filebuf.close.stdcxx-969.cpp
      - copied unchanged from r671890, stdcxx/branches/4.2.x/tests/regress/27.filebuf.close.stdcxx-969.cpp
Removed:
    stdcxx/trunk/etc/config/src/INLINE_MEMBER_TEMPLATES.cpp
Modified:
    stdcxx/trunk/README
    stdcxx/trunk/etc/config/src/EXTERN_MEMBER_TEMPLATE.cpp
    stdcxx/trunk/etc/config/src/MEMBER_TEMPLATES.cpp
    stdcxx/trunk/etc/config/src/extern_template_imp.cpp
    stdcxx/trunk/etc/config/src/extern_template_imp.h
    stdcxx/trunk/etc/config/src/libc_decl.sh
    stdcxx/trunk/etc/config/windows/configure.wsf
    stdcxx/trunk/include/fstream.cc
    stdcxx/trunk/include/rw/_config-msvcrt.h
    stdcxx/trunk/include/rw/_mutex.h
    stdcxx/trunk/include/rw/_tree.h
    stdcxx/trunk/util/gencat.cpp

Modified: stdcxx/trunk/README
URL: http://svn.apache.org/viewvc/stdcxx/trunk/README?rev=673648&r1=673647&r2=673648&view=diff
==============================================================================
--- stdcxx/trunk/README (original)
+++ stdcxx/trunk/README Thu Jul  3 03:36:21 2008
@@ -1008,12 +1008,6 @@
      #defined at  configuration time  according to the  declaration of
      the POSIX function iconv().
 
-  o  _RWSTD_NO_INLINE_MEMBER_TEMPLATES [auto, lib, over]
-
-     #defined  at  configuration  time  for C++  implementations  that
-     reject member templates completely defined within the body of the
-     class or template of which they are a member.
-
   o  _RWSTD_NO_INSTANTIATE_DEFAULT_ARGS [auto, over]
 
      #defined  at  configuration  time  for C++  implementations  that

Modified: stdcxx/trunk/etc/config/src/EXTERN_MEMBER_TEMPLATE.cpp
URL: http://svn.apache.org/viewvc/stdcxx/trunk/etc/config/src/EXTERN_MEMBER_TEMPLATE.cpp?rev=673648&r1=673647&r2=673648&view=diff
==============================================================================
--- stdcxx/trunk/etc/config/src/EXTERN_MEMBER_TEMPLATE.cpp (original)
+++ stdcxx/trunk/etc/config/src/EXTERN_MEMBER_TEMPLATE.cpp Thu Jul  3 03:36:21 2008
@@ -27,13 +27,9 @@
 // establish dependencies on the config tests and define config
 // macros used in the header below (the are not autodetected
 // in headers)
-#ifdef _RWSTD_NO_INLINE_MEMBER_TEMPLATE
-#  define NO_INLINE_MEMBER_TEMPLATE
-#endif   // _RWSTD_NO_INLINE_MEMBER_TEMPLATE
-
-#ifdef _RWSTD_NO_MEMBER_TEMPLATE
-#  define NO_MEMBER_TEMPLATE
-#endif   // _RWSTD_NO_MEMBER_TEMPLATE
+#ifdef _RWSTD_NO_MEMBER_TEMPLATES
+#  define NO_MEMBER_TEMPLATES
+#endif   // _RWSTD_NO_MEMBER_TEMPLATES
 
 // include a file containing the definition of a template
 // and an extern template directive referencing an explicit

Modified: stdcxx/trunk/etc/config/src/MEMBER_TEMPLATES.cpp
URL: http://svn.apache.org/viewvc/stdcxx/trunk/etc/config/src/MEMBER_TEMPLATES.cpp?rev=673648&r1=673647&r2=673648&view=diff
==============================================================================
--- stdcxx/trunk/etc/config/src/MEMBER_TEMPLATES.cpp (original)
+++ stdcxx/trunk/etc/config/src/MEMBER_TEMPLATES.cpp Thu Jul  3 03:36:21 2008
@@ -22,9 +22,6 @@
  * 
  **************************************************************************/
 
-// both tests must successfully compile
-#include "INLINE_MEMBER_TEMPLATES.cpp"
-
 struct C
 {
     template <class T>

Modified: stdcxx/trunk/etc/config/src/extern_template_imp.cpp
URL: http://svn.apache.org/viewvc/stdcxx/trunk/etc/config/src/extern_template_imp.cpp?rev=673648&r1=673647&r2=673648&view=diff
==============================================================================
--- stdcxx/trunk/etc/config/src/extern_template_imp.cpp (original)
+++ stdcxx/trunk/etc/config/src/extern_template_imp.cpp Thu Jul  3 03:36:21 2008
@@ -26,13 +26,9 @@
 // establish dependencies on the config tests and define config
 // macros used in the header below (the are not autodetected
 // in headers)
-#ifdef _RWSTD_NO_INLINE_MEMBER_TEMPLATE
-#  define NO_INLINE_MEMBER_TEMPLATE
-#endif   // _RWSTD_NO_INLINE_MEMBER_TEMPLATE
-
-#ifndef _RWSTD_NO_MEMBER_TEMPLATE
-#  define NO_MEMBER_TEMPLATE
-#endif   // _RWSTD_NO_MEMBER_TEMPLATE
+#ifndef _RWSTD_NO_MEMBER_TEMPLATES
+#  define NO_MEMBER_TEMPLATES
+#endif   // _RWSTD_NO_MEMBER_TEMPLATES
 
 // explicitly instantiate the template defined in the header
 #define INSTANTIATE

Modified: stdcxx/trunk/etc/config/src/extern_template_imp.h
URL: http://svn.apache.org/viewvc/stdcxx/trunk/etc/config/src/extern_template_imp.h?rev=673648&r1=673647&r2=673648&view=diff
==============================================================================
--- stdcxx/trunk/etc/config/src/extern_template_imp.h (original)
+++ stdcxx/trunk/etc/config/src/extern_template_imp.h Thu Jul  3 03:36:21 2008
@@ -47,33 +47,27 @@
         return bar ();
     }
 
-#if defined (NO_INLINE_MEMBER_TEMPLATE)
+#if defined (NO_MEMBER_TEMPLATES)
 
     int inline_member_template (int) const {
         return 0;
     }
 
-#else   // if !defined (NO_INLINE_MEMBER_TEMPLATE)
+    int member_template (int) const {
+        return 0;
+    }
+
+#else   // if !defined (NO_MEMBER_TEMPLATES)
 
     template <class U>
     U inline_member_template (U) const {
         return U ();
     }
 
-#endif   // NO_INLINE_MEMBER_TEMPLATE
-
-#if defined (NO_MEMBER_TEMPLATE)
-
-    int member_template (int) const {
-        return 0;
-    }
-
-#else   // if !defined (NO_MEMBER_TEMPLATE)
-
     template <class U>
     U member_template (U) const;
 
-#endif   // NO_MEMBER_TEMPLATE
+#endif   // NO_MEMBER_TEMPLATES
 
 };
 
@@ -93,7 +87,7 @@
 #endif   // INSTANTIATE
 }
 
-#if !defined (NO_MEMBER_TEMPLATE)
+#if !defined (NO_MEMBER_TEMPLATES)
 
 template <class T>
 template <class U>
@@ -102,7 +96,7 @@
     return U ();
 }
 
-#endif   // NO_MEMBER_TEMPLATE
+#endif   // NO_MEMBER_TEMPLATES
 
 
 #if defined (INSTANTIATE)

Modified: stdcxx/trunk/etc/config/src/libc_decl.sh
URL: http://svn.apache.org/viewvc/stdcxx/trunk/etc/config/src/libc_decl.sh?rev=673648&r1=673647&r2=673648&view=diff
==============================================================================
--- stdcxx/trunk/etc/config/src/libc_decl.sh (original)
+++ stdcxx/trunk/etc/config/src/libc_decl.sh Thu Jul  3 03:36:21 2008
@@ -348,7 +348,8 @@
         echo "$CXX -c -DCHECK_DECL $CXXFLAGS $WARNFLAGS "   \
              "-DHDRNAME=\"<$hdrname>\" -DFUNNAME=$funname " \
              "-DFUN=$f -DTAKE_ADDR=$take_addr "             \
-             "$tmpsrc -o $tmpobj" >>$logfile 2>&1
+             "$tmpsrc -o $tmpobj"                           \
+             "&& $LD $tmpobj $LDFLAGS -l$lib" >>$logfile 2>&1
 
         # spell out all arguments just like above, being careful
         # about quoting HDRNAME

Modified: stdcxx/trunk/etc/config/windows/configure.wsf
URL: http://svn.apache.org/viewvc/stdcxx/trunk/etc/config/windows/configure.wsf?rev=673648&r1=673647&r2=673648&view=diff
==============================================================================
--- stdcxx/trunk/etc/config/windows/configure.wsf (original)
+++ stdcxx/trunk/etc/config/windows/configure.wsf Thu Jul  3 03:36:21 2008
@@ -391,11 +391,11 @@
             sizes += "-";
         }
     }
-    var rxLP32 = /24?4/;
-    var rxILP32 = /44?4/;
-    var rxILP64 = /88?8/;
+    var rxLP32 = /24.4/;
+    var rxILP32 = /44.4/;
+    var rxILP64 = /88.8/;
     var rxLLP64 = /4488/;
-    var rxLP64 = /48?8/;
+    var rxLP64 = /48.8/;
     var arch;
     if (rxLP32.test(sizes))
     {
@@ -920,7 +920,7 @@
         var dep = /_RWSTD_(?:NO_)?(\S+)/.exec(deps[i])[1];
         // remove _IN_LIBC | _IN_LIBM from dependency string
         dep = dep.replace(/_IN_LIB[CM]/, "");
-        var rx = new RegExp("_RWSTD_NO_" + dep);
+        var rx = new RegExp("\\s+_RWSTD_NO_" + dep + "\\s+");
         if (!rx.test(configText))
         {
             if (dumpUnresolved)

Modified: stdcxx/trunk/include/fstream.cc
URL: http://svn.apache.org/viewvc/stdcxx/trunk/include/fstream.cc?rev=673648&r1=673647&r2=673648&view=diff
==============================================================================
--- stdcxx/trunk/include/fstream.cc (original)
+++ stdcxx/trunk/include/fstream.cc Thu Jul  3 03:36:21 2008
@@ -106,6 +106,10 @@
             _C_file    = 0;
             _C_cur_pos = _C_beg_pos = pos_type (off_type (-1));
 
+            // reset input/output sequences to prevent any
+            // subsequent I/O attempts on closed file
+            this->setg (0, 0, 0);
+            this->setp (0, 0);
         }
 
         // rethrow the caught exception
@@ -119,6 +123,11 @@
         // zero out the file pointer except when detaching fd
         _C_file    = 0;
         _C_cur_pos = _C_beg_pos = pos_type (off_type (-1));
+
+        // reset input/output sequences to prevent any
+        // subsequent I/O attempts on closed file
+        this->setg (0, 0, 0);
+        this->setp (0, 0);
     }
 
     return __retval;

Modified: stdcxx/trunk/include/rw/_config-msvcrt.h
URL: http://svn.apache.org/viewvc/stdcxx/trunk/include/rw/_config-msvcrt.h?rev=673648&r1=673647&r2=673648&view=diff
==============================================================================
--- stdcxx/trunk/include/rw/_config-msvcrt.h (original)
+++ stdcxx/trunk/include/rw/_config-msvcrt.h Thu Jul  3 03:36:21 2008
@@ -93,11 +93,6 @@
 #  define _RWSTD_LONG_LONG __int64
 #endif   // _MSC_VER <= 1300 || _RWSTD_NO_LONG_LONG
 
-#if defined (_WIN64)
-     // FIXME: handle by forward declaring fuctions in <rw/_mutex.h>
-#  define _RWSTD_NO_FWD_DECLARATIONS
-#endif   // _WIN64
-
 #if defined (WIN32) && !defined(_WIN32)
 #  define _WIN32
 #endif

Modified: stdcxx/trunk/include/rw/_mutex.h
URL: http://svn.apache.org/viewvc/stdcxx/trunk/include/rw/_mutex.h?rev=673648&r1=673647&r2=673648&view=diff
==============================================================================
--- stdcxx/trunk/include/rw/_mutex.h (original)
+++ stdcxx/trunk/include/rw/_mutex.h Thu Jul  3 03:36:21 2008
@@ -122,12 +122,21 @@
 
 #elif defined (_WIN32)
 
+#  ifdef __MINGW32__
+#    define _RWSTD_CRITICAL_SECTION _CRITICAL_SECTION
+#  else
+#    define _RWSTD_CRITICAL_SECTION _RTL_CRITICAL_SECTION
+#  endif
+
 #  ifdef _RWSTD_NO_FWD_DECLARATIONS
 
+     // #including <windows.h> without WIN32_LEAN_AND_MEAN macro defined
+     // may cause an errors "WinSock.h has already been included"
+     // when <winsock2.h> has been included after this header
 #    include <windows.h>
-#    define _RWSTD_MUTEX_T _RTL_CRITICAL_SECTION
+#    define _RWSTD_MUTEX_T _RWSTD_CRITICAL_SECTION
 
-#  else   // if defined (_RWSTD_NO_FWD_DECLARATIONS)
+#  else   // if !defined (_RWSTD_NO_FWD_DECLARATIONS)
 
    // avoid #including this header (MFC doesn't like it)
    // #  include <windows.h>
@@ -135,19 +144,32 @@
 extern "C" {
 
 // but rather declare these globals here
-struct _RTL_CRITICAL_SECTION;
+struct _RWSTD_CRITICAL_SECTION;
 
 __declspec (dllimport) void __stdcall
-InitializeCriticalSection (_RTL_CRITICAL_SECTION*);
+InitializeCriticalSection (_RWSTD_CRITICAL_SECTION*);
 
 __declspec (dllimport) void __stdcall
-EnterCriticalSection (_RTL_CRITICAL_SECTION*);
+EnterCriticalSection (_RWSTD_CRITICAL_SECTION*);
 
 __declspec (dllimport) void __stdcall
-LeaveCriticalSection (_RTL_CRITICAL_SECTION*);
+LeaveCriticalSection (_RWSTD_CRITICAL_SECTION*);
 
 __declspec (dllimport) void __stdcall
-DeleteCriticalSection (_RTL_CRITICAL_SECTION*);
+DeleteCriticalSection (_RWSTD_CRITICAL_SECTION*);
+
+#    if defined (_RWSTD_INTERLOCKED_T) && !defined (_MSC_VER)
+
+__declspec (dllimport) long __stdcall
+InterlockedIncrement (_RWSTD_INTERLOCKED_T*);
+
+__declspec (dllimport) long __stdcall
+InterlockedDecrement (_RWSTD_INTERLOCKED_T*);
+
+__declspec (dllimport) long __stdcall
+InterlockedExchange (_RWSTD_INTERLOCKED_T*, long);
+
+#    endif   // _RWSTD_INTERLOCKED_T && !_MSC_VER
 
 }   // extern "C"
 
@@ -199,15 +221,40 @@
 #        pragma intrinsic (_InterlockedExchange64)
 #      endif   // _RWSTD_MSVC
 #    endif   // _M_X64
+#  elif defined (_RWSTD_INTERLOCKED_T)
+
+inline long _InterlockedIncrement (volatile long *__x)
+{
+    return InterlockedIncrement (
+        _RWSTD_CONST_CAST (_RWSTD_INTERLOCKED_T*, __x));
+}
+
+inline long _InterlockedDecrement (volatile long *__x)
+{
+    return InterlockedDecrement (
+        _RWSTD_CONST_CAST (_RWSTD_INTERLOCKED_T*, __x));
+}
+
+inline long _InterlockedExchange (volatile long *__x, long __y)
+{
+    return InterlockedExchange (
+        _RWSTD_CONST_CAST (_RWSTD_INTERLOCKED_T*, __x), __y);
+}
+
 #  endif   // _MSC_VER
 
 
 _RWSTD_NAMESPACE (__rw) { 
 
+#  ifndef _MSC_VER
+#    define __try               if (1)
+#    define __except(ignore)    else if (0)
+#  endif   // _MSC_VER
+
 // Win32/64 throws non-C++ exceptions rather than returning error status
 // from some system calls like most other operating systems do
 
-inline int __rw_mutex_init (_RTL_CRITICAL_SECTION *__mutex)
+inline int __rw_mutex_init (_RWSTD_CRITICAL_SECTION *__mutex)
 {
     __try {
         InitializeCriticalSection (__mutex);
@@ -218,7 +265,7 @@
     return 0;
 }
 
-inline int __rw_mutex_destroy (_RTL_CRITICAL_SECTION *__mutex)
+inline int __rw_mutex_destroy (_RWSTD_CRITICAL_SECTION *__mutex)
 {
     __try {
         DeleteCriticalSection (__mutex);
@@ -229,7 +276,7 @@
     return 0;
 }
 
-inline int __rw_mutex_lock (_RTL_CRITICAL_SECTION *__mutex)
+inline int __rw_mutex_lock (_RWSTD_CRITICAL_SECTION *__mutex)
 {
     __try {
         EnterCriticalSection (__mutex);
@@ -240,7 +287,7 @@
     return 0;
 }
 
-inline int __rw_mutex_unlock (_RTL_CRITICAL_SECTION *__mutex)
+inline int __rw_mutex_unlock (_RWSTD_CRITICAL_SECTION *__mutex)
 {
     __try {
         LeaveCriticalSection (__mutex);
@@ -252,13 +299,18 @@
 }
 
 #  define _RWSTD_MUTEX_INIT(mutex)      \
-   __rw_mutex_init (_RWSTD_REINTERPRET_CAST (_RTL_CRITICAL_SECTION*, &mutex))
+   __rw_mutex_init (_RWSTD_REINTERPRET_CAST (_RWSTD_CRITICAL_SECTION*, &mutex))
 #  define _RWSTD_MUTEX_DESTROY(mutex)   \
-   __rw_mutex_destroy (_RWSTD_REINTERPRET_CAST (_RTL_CRITICAL_SECTION*, &mutex))
+   __rw_mutex_destroy (_RWSTD_REINTERPRET_CAST (_RWSTD_CRITICAL_SECTION*, &mutex))
 #  define _RWSTD_MUTEX_LOCK(mutex)      \
-   __rw_mutex_lock (_RWSTD_REINTERPRET_CAST (_RTL_CRITICAL_SECTION*, &mutex))
+   __rw_mutex_lock (_RWSTD_REINTERPRET_CAST (_RWSTD_CRITICAL_SECTION*, &mutex))
 #  define _RWSTD_MUTEX_UNLOCK(mutex)    \
-   __rw_mutex_unlock (_RWSTD_REINTERPRET_CAST (_RTL_CRITICAL_SECTION*, &mutex))
+   __rw_mutex_unlock (_RWSTD_REINTERPRET_CAST (_RWSTD_CRITICAL_SECTION*, &mutex))
+
+#  ifndef _MSC_VER
+#    undef __try
+#    undef __except
+#  endif   // _MSC_VER
 
 }   // namespace __rw
 

Modified: stdcxx/trunk/include/rw/_tree.h
URL: http://svn.apache.org/viewvc/stdcxx/trunk/include/rw/_tree.h?rev=673648&r1=673647&r2=673648&view=diff
==============================================================================
--- stdcxx/trunk/include/rw/_tree.h (original)
+++ stdcxx/trunk/include/rw/_tree.h Thu Jul  3 03:36:21 2008
@@ -261,9 +261,9 @@
     
     typedef __rw_rb_tree_node<_Alloc,_Val,_Key,_KeyOf> _C_node_t; 
     typedef _RWSTD_ALLOC_TYPE (_Alloc,_Val)            _C_val_alloc_t;
-    typedef _TYPENAME _C_node_t::_C_key_alloc_t        _C_key_alloc_t;
-    typedef _TYPENAME _C_node_t::_C_node_alloc_t       _C_node_alloc_t;
-    typedef _TYPENAME _C_node_t::_C_link_t             _C_link_t;
+    typedef _RWSTD_REBIND (_Alloc, _Key)               _C_key_alloc_t;
+    typedef _RWSTD_REBIND (_Alloc, _C_node_t)          _C_node_alloc_t;
+    typedef _TYPENAME _C_node_alloc_t::pointer         _C_link_t;
 
 public:
     

Modified: stdcxx/trunk/util/gencat.cpp
URL: http://svn.apache.org/viewvc/stdcxx/trunk/util/gencat.cpp?rev=673648&r1=673647&r2=673648&view=diff
==============================================================================
--- stdcxx/trunk/util/gencat.cpp (original)
+++ stdcxx/trunk/util/gencat.cpp Thu Jul  3 03:36:21 2008
@@ -114,11 +114,7 @@
 
 #ifdef _WIN32
 
-#  ifndef _WIN64
-#    define PLATFORM "X86"
-#  else   // _WIN64
-#    define PLATFORM "X64"
-#  endif  // _WIN64
+#  ifndef __MINGW32__
 
     const char* const env_vars [] = {
         "VS90COMNTOOLS", "VS80COMNTOOLS",
@@ -138,14 +134,35 @@
         cmd.push_back ('\"');
     }
 
+    if (!cmd.empty ())
+        cmd += " && ";
+
+#  endif   // !__MINGW32__
+
     const char* const dll_name = argv [0];
     const char* const rc_name = argv [1];
 
     std::string res_name (rc_name);
     change_ext (res_name, ".res");
 
-    if (!cmd.empty ())
-        cmd += " && ";
+#  ifdef __MINGW32__
+
+    cmd += "windres -O coff -i ";
+    cmd += rc_name;
+    cmd += " -o ";
+    cmd += res_name;
+    cmd += " && gcc -shared -o ";
+    cmd += dll_name;
+    cmd += ' ';
+    cmd += res_name;
+
+#  else
+
+#    ifndef _WIN64
+#      define PLATFORM "X86"
+#    else   // _WIN64
+#      define PLATFORM "X64"
+#    endif  // _WIN64
 
     cmd += "rc ";
     cmd += rc_name;
@@ -154,6 +171,8 @@
     cmd += ' ';
     cmd += res_name;
     
+#  endif   // __MINGW32__
+
     const int ret = std::system (cmd.c_str ());
 
     std::remove (res_name.c_str ());