mozilla-gcc6.patch
changeset 916 2f9f2e040647
equal deleted inserted replaced
915:e969636be188 916:2f9f2e040647
       
     1 
       
     2 # HG changeset patch
       
     3 # User Mike Hommey <mh+mozilla@glandium.org>
       
     4 # Date 1457596445 -32400
       
     5 # Node ID 55212130f19da3079167a6b0a5a0ed6689c9a71d
       
     6 # Parent  27c94617d7064d566c24a42e11cd4c7ef725923d
       
     7 Bug 1245076 - Don't include mozalloc.h from the cstdlib wrapper. r=froydnj
       
     8 
       
     9 Our STL wrappers do various different things, one of which is including
       
    10 mozalloc.h for infallible operator new. mozalloc.h includes stdlib.h,
       
    11 which, in libstdc++ >= 6 is now itself a wrapper around cstdlib, which
       
    12 circles back to our STL wrapper.
       
    13 
       
    14 But of the things our STL wrappers do, including mozalloc.h is not one
       
    15 that is necessary for cstdlib. So skip including mozalloc.h in our
       
    16 cstdlib wrapper.
       
    17 
       
    18 Additionally, some C++ sources (in media/mtransport) are including
       
    19 headers in an extern "C" block, which end up including stdlib.h, which
       
    20 ends up including cstdlib because really, this is all C++, and our
       
    21 wrapper pre-includes <new> for mozalloc.h, which fails because templates
       
    22 don't work inside extern "C". So, don't pre-include <new> when we're not
       
    23 including mozalloc.h.
       
    24 
       
    25 
       
    26 diff --git a/config/gcc-stl-wrapper.template.h b/config/gcc-stl-wrapper.template.h
       
    27 --- a/config/gcc-stl-wrapper.template.h
       
    28 +++ b/config/gcc-stl-wrapper.template.h
       
    29 @@ -12,33 +12,40 @@
       
    30  // compiling ObjC.
       
    31  #if defined(__EXCEPTIONS) && __EXCEPTIONS && !(__OBJC__ && __GNUC__ && XP_IOS)
       
    32  #  error "STL code can only be used with -fno-exceptions"
       
    33  #endif
       
    34  
       
    35  // Silence "warning: #include_next is a GCC extension"
       
    36  #pragma GCC system_header
       
    37  
       
    38 +// Don't include mozalloc for cstdlib. See bug 1245076.
       
    39 +#ifndef moz_dont_include_mozalloc_for_cstdlib
       
    40 +#  define moz_dont_include_mozalloc_for_cstdlib
       
    41 +#endif
       
    42 +#ifndef moz_dont_include_mozalloc_for_${HEADER}
       
    43  // mozalloc.h wants <new>; break the cycle by always explicitly
       
    44  // including <new> here.  NB: this is a tad sneaky.  Sez the gcc docs:
       
    45  //
       
    46  //    `#include_next' does not distinguish between <file> and "file"
       
    47  //    inclusion, nor does it check that the file you specify has the
       
    48  //    same name as the current file. It simply looks for the file
       
    49  //    named, starting with the directory in the search path after the
       
    50  //    one where the current file was found.
       
    51 -#include_next <new>
       
    52 +#  include_next <new>
       
    53  
       
    54  // See if we're in code that can use mozalloc.  NB: this duplicates
       
    55  // code in nscore.h because nscore.h pulls in prtypes.h, and chromium
       
    56  // can't build with that being included before base/basictypes.h.
       
    57 -#if !defined(XPCOM_GLUE) && !defined(NS_NO_XPCOM) && !defined(MOZ_NO_MOZALLOC)
       
    58 -#  include "mozilla/mozalloc.h"
       
    59 -#else
       
    60 -#  error "STL code can only be used with infallible ::operator new()"
       
    61 +#  if !defined(XPCOM_GLUE) && !defined(NS_NO_XPCOM) && !defined(MOZ_NO_MOZALLOC)
       
    62 +#    include "mozilla/mozalloc.h"
       
    63 +#  else
       
    64 +#    error "STL code can only be used with infallible ::operator new()"
       
    65 +#  endif
       
    66 +
       
    67  #endif
       
    68  
       
    69  #if defined(DEBUG) && !defined(_GLIBCXX_DEBUG)
       
    70  // Enable checked iterators and other goodies
       
    71  //
       
    72  // FIXME/bug 551254: gcc's debug STL implementation requires -frtti.
       
    73  // Figure out how to resolve this with -fno-rtti.  Maybe build with
       
    74  // -frtti in DEBUG builds?
       
    75 
       
    76