2010-04-02 21:58:11 +04:00
|
|
|
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
|
|
* vim: sw=2 ts=8 et :
|
|
|
|
*/
|
2012-05-21 15:12:37 +04:00
|
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
2010-04-02 21:58:11 +04:00
|
|
|
|
|
|
|
#ifndef mozilla_${HEADER}_h
|
|
|
|
#define mozilla_${HEADER}_h
|
|
|
|
|
2011-10-11 19:10:29 +04:00
|
|
|
// For some reason, Apple's GCC refuses to honor -fno-exceptions when
|
|
|
|
// compiling ObjC.
|
2015-02-03 04:35:19 +03:00
|
|
|
#if defined(__EXCEPTIONS) && __EXCEPTIONS && !(__OBJC__ && __GNUC__ && XP_IOS)
|
2010-04-02 21:58:11 +04:00
|
|
|
# error "STL code can only be used with -fno-exceptions"
|
|
|
|
#endif
|
|
|
|
|
2010-04-21 00:12:02 +04:00
|
|
|
// Silence "warning: #include_next is a GCC extension"
|
|
|
|
#pragma GCC system_header
|
|
|
|
|
2016-05-18 10:37:19 +03:00
|
|
|
#if defined(DEBUG) && !defined(_GLIBCXX_DEBUG)
|
|
|
|
// Enable checked iterators and other goodies
|
|
|
|
//
|
|
|
|
// FIXME/bug 551254: gcc's debug STL implementation requires -frtti.
|
|
|
|
// Figure out how to resolve this with -fno-rtti. Maybe build with
|
|
|
|
// -frtti in DEBUG builds?
|
|
|
|
//
|
|
|
|
// # define _GLIBCXX_DEBUG 1
|
|
|
|
#endif
|
|
|
|
|
2021-02-28 20:47:27 +03:00
|
|
|
// Don't include mozalloc.h for cstdlib, type_traits, limits and iosfwd.
|
|
|
|
// See bug 1245076 (cstdlib), bug 1594027 (type_traits, limits) and
|
|
|
|
// bug 1694575 (iosfwd).
|
|
|
|
// Please be careful when adding more exceptions, especially regarding
|
|
|
|
// the header not directly or indirectly including <new>.
|
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.
2016-03-10 10:54:05 +03:00
|
|
|
#ifndef moz_dont_include_mozalloc_for_cstdlib
|
|
|
|
# define moz_dont_include_mozalloc_for_cstdlib
|
|
|
|
#endif
|
2010-04-21 00:12:02 +04:00
|
|
|
|
2020-02-24 23:18:01 +03:00
|
|
|
#ifndef moz_dont_include_mozalloc_for_type_traits
|
|
|
|
# define moz_dont_include_mozalloc_for_type_traits
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef moz_dont_include_mozalloc_for_limits
|
|
|
|
# define moz_dont_include_mozalloc_for_limits
|
|
|
|
#endif
|
|
|
|
|
2021-02-28 20:47:27 +03:00
|
|
|
#ifndef moz_dont_include_mozalloc_for_iosfwd
|
|
|
|
# define moz_dont_include_mozalloc_for_iosfwd
|
|
|
|
#endif
|
|
|
|
|
2016-05-18 10:37:19 +03:00
|
|
|
// Include mozalloc after the STL header and all other headers it includes
|
|
|
|
// have been preprocessed.
|
|
|
|
#if !defined(MOZ_INCLUDE_MOZALLOC_H) && \
|
|
|
|
!defined(moz_dont_include_mozalloc_for_${HEADER})
|
|
|
|
# define MOZ_INCLUDE_MOZALLOC_H
|
|
|
|
# define MOZ_INCLUDE_MOZALLOC_H_FROM_${HEADER}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#pragma GCC visibility push(default)
|
|
|
|
#include_next <${HEADER}>
|
|
|
|
#pragma GCC visibility pop
|
|
|
|
|
|
|
|
#ifdef MOZ_INCLUDE_MOZALLOC_H_FROM_${HEADER}
|
2017-12-06 03:56:02 +03:00
|
|
|
// See if we're in code that can use mozalloc.
|
|
|
|
# if !defined(NS_NO_XPCOM) && !defined(MOZ_NO_MOZALLOC)
|
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.
2016-03-10 10:54:05 +03:00
|
|
|
# include "mozilla/mozalloc.h"
|
|
|
|
# else
|
|
|
|
# error "STL code can only be used with infallible ::operator new()"
|
|
|
|
# endif
|
2010-04-02 21:58:11 +04:00
|
|
|
#endif
|
|
|
|
|
|
|
|
// gcc calls a __throw_*() function from bits/functexcept.h when it
|
|
|
|
// wants to "throw an exception". functexcept exists nominally to
|
|
|
|
// support -fno-exceptions, but since we'll always use the system
|
|
|
|
// libstdc++, and it's compiled with exceptions, then in practice
|
|
|
|
// these __throw_*() functions will always throw exceptions (shades of
|
|
|
|
// -fshort-wchar). We don't want that and so define our own inlined
|
|
|
|
// __throw_*().
|
2010-04-21 00:12:02 +04:00
|
|
|
#ifndef mozilla_throw_gcc_h
|
|
|
|
# include "mozilla/throw_gcc.h"
|
2010-04-02 21:58:11 +04:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif // if mozilla_${HEADER}_h
|