For reference, I'm attaching a list of the 67 warnings of this type that
we currently hit in a debug m-c clobber build. (each of which is an
instance where we fail to inline despite the always_inline keyword, I
believe)

Incidentally, most of them are in libjpeg, because we define libjpeg's
frequently-used INLINE keyword to NS_ALWAYS_INLINE[1] and hence trigger
a lot of this problem there:

~Daniel

[1] https://mxr.mozilla.org/mozilla-central/source/media/libjpeg/config.h#6


On 10/07/2012 01:38 PM, Daniel Holbert wrote:
> GCC 4.7 apparently complains if you specify the "always_inline"
> attribute without also specifying "inline", as observed in [1] and [2].
> The exact warning is:
> 
>    # warning: always_inline function might not
>    # be inlinable [-Wattributes]
> 
> Right now, we define NS_ALWAYS_INLINE as __attribute__((always_inline))
> [3], and we never bother to add "inline" alongside it in practice.  So
> we basically trigger an instance of this warning (and fail to inline the
> function) for each NS_ALWAYS_INLINE usage in GCC 4.7 builds, with a few
> exceptions[4].
> 
> To fix the warning and actually get inlining behavior, I think we need
> to do either of the following:
>  (a) include "inline" alongside NS_ALWAYS_INLINE in each usage
>  (b) or, change the definition of NS_ALWAYS_INLINE to include "inline"
> 
> We already effectively do (b) for MOZALLOC_INLINE [5], FWIW.
> 
> Thoughts?
> 
> ~Daniel
> 
> [1] http://comments.gmane.org/gmane.linux.bluez.kernel/22080
> [2]
> https://github.com/zfsonlinux/zfs/commit/10be533e3344f523e1b8d6ab4f0658897a95ac02
> [3] https://mxr.mozilla.org/mozilla-central/source/configure.in#3843
> [4] One exception: methods that are defined in the body of a class will
> get automatically marked as inline "as required by ISO C++" per
> http://gcc.gnu.org/onlinedocs/gcc/Inline.html
> [5]
> https://mxr.mozilla.org/mozilla-central/source/memory/mozalloc/mozalloc.h#43
> _______________________________________________
> dev-platform mailing list
> dev-platform@lists.mozilla.org
> https://lists.mozilla.org/listinfo/dev-platform
> 
/mozilla/intl/unicharutil/util/nsUnicharUtils.cpp:275:1: warning: always_inline 
function might not be inlinable [-Wattributes]
/mozilla/intl/unicharutil/util/nsUnicharUtils.cpp:50:1: warning: always_inline 
function might not be inlinable [-Wattributes]
/mozilla/intl/unicharutil/util/nsUnicharUtils.cpp:40:1: warning: always_inline 
function might not be inlinable [-Wattributes]
/obj/intl/unicharutil/util/internal/nsUnicharUtils.cpp:275:1: warning: 
always_inline function might not be inlinable [-Wattributes]
/obj/intl/unicharutil/util/internal/nsUnicharUtils.cpp:50:1: warning: 
always_inline function might not be inlinable [-Wattributes]
/obj/intl/unicharutil/util/internal/nsUnicharUtils.cpp:40:1: warning: 
always_inline function might not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdcolext.c:113:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdcolext.c:82:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdcolext.c:29:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdcolext.c:113:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdcolext.c:82:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdcolext.c:29:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdcolext.c:113:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdcolext.c:82:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdcolext.c:29:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdcolext.c:113:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdcolext.c:82:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdcolext.c:29:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdcolext.c:113:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdcolext.c:82:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdcolext.c:29:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdcolext.c:113:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdcolext.c:82:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdcolext.c:29:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdcolext.c:113:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdcolext.c:82:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdcolext.c:29:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdmrgext.c:95:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdmrgext.c:22:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdmrgext.c:95:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdmrgext.c:22:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdmrgext.c:95:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdmrgext.c:22:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdmrgext.c:95:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdmrgext.c:22:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdmrgext.c:95:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdmrgext.c:22:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdmrgext.c:95:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdmrgext.c:22:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdmrgext.c:95:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jdmrgext.c:22:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jccolext.c:124:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jccolext.c:87:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jccolext.c:30:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jccolext.c:124:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jccolext.c:87:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jccolext.c:30:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jccolext.c:124:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jccolext.c:87:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jccolext.c:30:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jccolext.c:124:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jccolext.c:87:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jccolext.c:30:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jccolext.c:124:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jccolext.c:87:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jccolext.c:30:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jccolext.c:124:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jccolext.c:87:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jccolext.c:30:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jccolext.c:124:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jccolext.c:87:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/media/libjpeg/jccolext.c:30:1: warning: always_inline function might 
not be inlinable [-Wattributes]
/mozilla/toolkit/components/places/SQLFunctions.cpp:95:3: warning: 
always_inline function might not be inlinable [-Wattributes]
/mozilla/toolkit/components/places/SQLFunctions.cpp:48:3: warning: 
always_inline function might not be inlinable [-Wattributes]
/obj/toolkit/library/nsUnicharUtils.cpp:275:1: warning: always_inline function 
might not be inlinable [-Wattributes]
/obj/toolkit/library/nsUnicharUtils.cpp:50:1: warning: always_inline function 
might not be inlinable [-Wattributes]
/obj/toolkit/library/nsUnicharUtils.cpp:40:1: warning: always_inline function 
might not be inlinable [-Wattributes]
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to