]> granicus.if.org Git - gc/commitdiff
Avoid new[] debug variant definition for ancient MS VC++
authorIvan Maidanski <ivmai@mail.ru>
Mon, 4 May 2015 20:21:06 +0000 (23:21 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Mon, 11 May 2015 16:11:30 +0000 (19:11 +0300)
(restore behavior broken in commit 3d784ed)

* include/gc_cpp.h (operator new[]): Update comment.
* include/gc_cpp.h (operator new[]): Do not define the debug variant
for MS VC pre-v7; add comment.

Conflicts:

    include/gc_cpp.h

include/gc_cpp.h

index 9190027ebeb80f274d8e7bdd3550f72cd18ed760..b0ab26096d42484ba3024caf1ca15b0227c49f2c 100644 (file)
@@ -281,6 +281,9 @@ inline void* operator new(size_t size, GC_NS_QUALIFY(GCPlacement) gcp,
   // if we define a multi-argument operator new[].
   // There seems to be no way to redirect new in this environment without
   // including this everywhere.
+  // Inlining done to avoid mix up of new and delete operators by VC++ 9 (due
+  // to arbitrary ordering during linking).
+
 # if _MSC_VER > 1020
     inline void* operator new[](size_t size)
     {
@@ -314,11 +317,14 @@ inline void* operator new(size_t size, GC_NS_QUALIFY(GCPlacement) gcp,
 #   endif
   }
 
-  inline void* operator new[](size_t size, int nBlockUse,
-                              const char* szFileName, int nLine)
-  {
-    return operator new(size, nBlockUse, szFileName, nLine);
-  }
+# if _MSC_VER > 1020
+    // This new operator is used by VC++ 7+ in Debug builds:
+    inline void* operator new[](size_t size, int nBlockUse,
+                                const char* szFileName, int nLine)
+    {
+      return operator new(size, nBlockUse, szFileName, nLine);
+    }
+# endif
 
 #endif // _MSC_VER