[tbb-commits] [tor-browser/tor-browser-45.4.0esr-6.5-1] Bug 1245076 - Don't include mozalloc.h from the cstdlib wrapper. r=froydnj

gk at torproject.org gk at torproject.org
Thu Oct 6 07:55:36 UTC 2016


commit ef6b1ceff3996006497ebbdbd02104031eaf64f5
Author: Mike Hommey <mh+mozilla at glandium.org>
Date:   Thu Mar 10 16:54:05 2016 +0900

    Bug 1245076 - Don't include mozalloc.h from the cstdlib wrapper. r=froydnj
    
    Our STL wrappers do various different things, one of which is including
    mozalloc.h for infallible operator new. mozalloc.h includes stdlib.h,
    which, in libstdc++ >= 6 is now itself a wrapper around cstdlib, which
    circles back to our STL wrapper.
    
    But of the things our STL wrappers do, including mozalloc.h is not one
    that is necessary for cstdlib. So skip including mozalloc.h in our
    cstdlib wrapper.
    
    Additionally, some C++ sources (in media/mtransport) are including
    headers in an extern "C" block, which end up including stdlib.h, which
    ends up including cstdlib because really, this is all C++, and our
    wrapper pre-includes <new> for mozalloc.h, which fails because templates
    don't work inside extern "C". So, don't pre-include <new> when we're not
    including mozalloc.h.
---
 config/gcc-stl-wrapper.template.h | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/config/gcc-stl-wrapper.template.h b/config/gcc-stl-wrapper.template.h
index 75bbe75..b5ebeec 100644
--- a/config/gcc-stl-wrapper.template.h
+++ b/config/gcc-stl-wrapper.template.h
@@ -17,6 +17,11 @@
 // Silence "warning: #include_next is a GCC extension"
 #pragma GCC system_header
 
+// Don't include mozalloc for cstdlib. See bug 1245076.
+#ifndef moz_dont_include_mozalloc_for_cstdlib
+#  define moz_dont_include_mozalloc_for_cstdlib
+#endif
+#ifndef moz_dont_include_mozalloc_for_${HEADER}
 // mozalloc.h wants <new>; break the cycle by always explicitly
 // including <new> here.  NB: this is a tad sneaky.  Sez the gcc docs:
 //
@@ -25,15 +30,17 @@
 //    same name as the current file. It simply looks for the file
 //    named, starting with the directory in the search path after the
 //    one where the current file was found.
-#include_next <new>
+#  include_next <new>
 
 // See if we're in code that can use mozalloc.  NB: this duplicates
 // code in nscore.h because nscore.h pulls in prtypes.h, and chromium
 // can't build with that being included before base/basictypes.h.
-#if !defined(XPCOM_GLUE) && !defined(NS_NO_XPCOM) && !defined(MOZ_NO_MOZALLOC)
-#  include "mozilla/mozalloc.h"
-#else
-#  error "STL code can only be used with infallible ::operator new()"
+#  if !defined(XPCOM_GLUE) && !defined(NS_NO_XPCOM) && !defined(MOZ_NO_MOZALLOC)
+#    include "mozilla/mozalloc.h"
+#  else
+#    error "STL code can only be used with infallible ::operator new()"
+#  endif
+
 #endif
 
 #if defined(DEBUG) && !defined(_GLIBCXX_DEBUG)





More information about the tbb-commits mailing list