Bug 1332747 Change MOZ_ALWAYS_INLINE to MOZ_ALWAYS_INLINE_EVEN_DEBUG to fix MinGW Debug build draft
authorTom Ritter <tom@mozilla.com>
Tue, 11 Apr 2017 12:53:58 -0500
changeset 560628 9bcdcb13405d983cc0cf4eafec05f4bce24df5ab
parent 557270 2661def031a49d5078263399fd95e7a398b131d8
child 623762 4365090b1e7b2f76f20f3f3db85e90eaf1e0441e
push id53487
push userbmo:tom@mozilla.com
push dateTue, 11 Apr 2017 17:54:23 +0000
bugs1332747
milestone52.0.3
Bug 1332747 Change MOZ_ALWAYS_INLINE to MOZ_ALWAYS_INLINE_EVEN_DEBUG to fix MinGW Debug build MozReview-Commit-ID: 7CkreJM1mHr
memory/mozalloc/throw_gcc.h
--- a/memory/mozalloc/throw_gcc.h
+++ b/memory/mozalloc/throw_gcc.h
@@ -27,119 +27,129 @@
       defined(_LIBCPP_VERSION) && _LIBCPP_VERSION >= 4000
 #    define MOZ_THROW_NORETURN [[noreturn]]
 #  endif
 #endif
 #ifndef MOZ_THROW_NORETURN
 #  define MOZ_THROW_NORETURN MOZ_NORETURN
 #endif
 
+
+// MinGW doesn't appropriately inline these functions in debug builds,
+// so we need to do some extra coercion for it to do so. Bug 1332747
+#ifdef __MINGW32__
+#  define MOZ_THROW_INLINE MOZ_ALWAYS_INLINE_EVEN_DEBUG
+#else
+#  define MOZ_THROW_INLINE MOZ_ALWAYS_INLINE
+#endif
+
 namespace std {
 
 // NB: user code is not supposed to touch the std:: namespace.  We're
 // doing this after careful review because we want to define our own
 // exception throwing semantics.  Don't try this at home!
 
-MOZ_THROW_NORETURN MOZ_EXPORT MOZ_ALWAYS_INLINE void
+MOZ_THROW_NORETURN MOZ_EXPORT MOZ_THROW_INLINE void
 __throw_bad_exception(void)
 {
     mozalloc_abort("fatal: STL threw bad_exception");
 }
 
-MOZ_THROW_NORETURN MOZ_EXPORT MOZ_ALWAYS_INLINE void
+MOZ_THROW_NORETURN MOZ_EXPORT MOZ_THROW_INLINE void
 __throw_bad_alloc(void)
 {
     mozalloc_abort("fatal: STL threw bad_alloc");
 }
 
-MOZ_THROW_NORETURN MOZ_EXPORT MOZ_ALWAYS_INLINE void
+MOZ_THROW_NORETURN MOZ_EXPORT MOZ_THROW_INLINE void
 __throw_bad_cast(void)
 {
     mozalloc_abort("fatal: STL threw bad_cast");
 }
 
-MOZ_THROW_NORETURN MOZ_EXPORT MOZ_ALWAYS_INLINE void
+MOZ_THROW_NORETURN MOZ_EXPORT MOZ_THROW_INLINE void
 __throw_bad_typeid(void)
 {
     mozalloc_abort("fatal: STL threw bad_typeid");
 }
 
 // used by <functional>
-MOZ_THROW_NORETURN MOZ_EXPORT MOZ_ALWAYS_INLINE void
+MOZ_THROW_NORETURN MOZ_EXPORT MOZ_THROW_INLINE void
 __throw_bad_function_call(void)
 {
     mozalloc_abort("fatal: STL threw bad_function_call");
 }
 
-MOZ_THROW_NORETURN MOZ_EXPORT MOZ_ALWAYS_INLINE void
+MOZ_THROW_NORETURN MOZ_EXPORT MOZ_THROW_INLINE void
 __throw_logic_error(const char* msg)
 {
     mozalloc_abort(msg);
 }
 
-MOZ_THROW_NORETURN MOZ_EXPORT MOZ_ALWAYS_INLINE void
+MOZ_THROW_NORETURN MOZ_EXPORT MOZ_THROW_INLINE void
 __throw_domain_error(const char* msg)
 {
     mozalloc_abort(msg);
 }
 
-MOZ_THROW_NORETURN MOZ_EXPORT MOZ_ALWAYS_INLINE void
+MOZ_THROW_NORETURN MOZ_EXPORT MOZ_THROW_INLINE void
 __throw_invalid_argument(const char* msg)
 {
     mozalloc_abort(msg);
 }
 
-MOZ_THROW_NORETURN MOZ_EXPORT MOZ_ALWAYS_INLINE void
+MOZ_THROW_NORETURN MOZ_EXPORT MOZ_THROW_INLINE void
 __throw_length_error(const char* msg)
 {
     mozalloc_abort(msg);
 }
 
-MOZ_THROW_NORETURN MOZ_EXPORT MOZ_ALWAYS_INLINE void
+MOZ_THROW_NORETURN MOZ_EXPORT MOZ_THROW_INLINE void
 __throw_out_of_range(const char* msg)
 {
     mozalloc_abort(msg);
 }
 
-MOZ_THROW_NORETURN MOZ_EXPORT MOZ_ALWAYS_INLINE void
+MOZ_THROW_NORETURN MOZ_EXPORT MOZ_THROW_INLINE void
 __throw_runtime_error(const char* msg)
 {
     mozalloc_abort(msg);
 }
 
-MOZ_THROW_NORETURN MOZ_EXPORT MOZ_ALWAYS_INLINE void
+MOZ_THROW_NORETURN MOZ_EXPORT MOZ_THROW_INLINE void
 __throw_range_error(const char* msg)
 {
     mozalloc_abort(msg);
 }
 
-MOZ_THROW_NORETURN MOZ_EXPORT MOZ_ALWAYS_INLINE void
+MOZ_THROW_NORETURN MOZ_EXPORT MOZ_THROW_INLINE void
 __throw_overflow_error(const char* msg)
 {
     mozalloc_abort(msg);
 }
 
-MOZ_THROW_NORETURN MOZ_EXPORT MOZ_ALWAYS_INLINE void
+MOZ_THROW_NORETURN MOZ_EXPORT MOZ_THROW_INLINE void
 __throw_underflow_error(const char* msg)
 {
     mozalloc_abort(msg);
 }
 
-MOZ_THROW_NORETURN MOZ_EXPORT MOZ_ALWAYS_INLINE void
+MOZ_THROW_NORETURN MOZ_EXPORT MOZ_THROW_INLINE void
 __throw_ios_failure(const char* msg)
 {
     mozalloc_abort(msg);
 }
 
-MOZ_THROW_NORETURN MOZ_EXPORT MOZ_ALWAYS_INLINE void
+MOZ_THROW_NORETURN MOZ_EXPORT MOZ_THROW_INLINE void
 __throw_system_error(int err)
 {
     char error[128];
     snprintf(error, sizeof(error)-1,
              "fatal: STL threw system_error: %s (%d)", strerror(err), err);
     mozalloc_abort(error);
 }
 
 } // namespace std
 
 #undef MOZ_THROW_NORETURN
+#undef MOZ_THROW_INLINE
 
 #endif  // mozilla_throw_gcc_h