[llvm-dev] MSVC warning noise on "LLVM_ATTRIBUTE_ALWAYS_INLINE inline void foo()"
Johan Engelen via llvm-dev
llvm-dev at lists.llvm.org
Mon Dec 21 03:40:34 PST 2015
On Mon, Dec 21, 2015 at 12:08 AM, Aaron Ballman <aaron at aaronballman.com>
wrote:
> On Sun, Dec 20, 2015 at 5:57 PM, Johan Engelen <jbc.engelen at gmail.com>
> wrote:
> >
> > Perhaps LLVM_ATTRIBUTE_ALWAYS_INLINE could be defined to "inline" if the
> > compiler has no support for always_inline (currently it is set to
> nothing in
> > that case) ?
> > I think this would allow removal of the "inline" after
> > LLVM_ATTRIBUTE_ALWAYS_INLINE.
>
> Wouldn't this cause functions with MSVC that are marked
> LLVM_ATTRIBUTE_ALWAYS_INLINE but not 'inline' to not be inlined?
>
__forceinline means that MSVC will always inline that function, that is why
the extra "inline" results in a warning.
I propose:
in llvm/Support/Compiler.h
#if __has_attribute(always_inline) || LLVM_GNUC_PREREQ(4, 0, 0)
#define LLVM_ATTRIBUTE_ALWAYS_INLINE __attribute__((always_inline))
#elif defined(_MSC_VER) #define LLVM_ATTRIBUTE_ALWAYS_INLINE
__forceinline #else- #define LLVM_ATTRIBUTE_ALWAYS_INLINE+ #define
LLVM_ATTRIBUTE_ALWAYS_INLINE inline #endif
and elsewhere
LLVM_ATTRIBUTE_ALWAYS_INLINE- inline bool operator==(StringRef LHS,
StringRef RHS) {
+ bool operator==(StringRef LHS, StringRef RHS) {
return LHS.equals(RHS);
}
As far as I can tell from online documentation, that will do the correct
thing on MSVC and GCC. For non-MSVC, non-GCC, this will add "inline" in
front of some functions that do not have it right now, notably member
functions that are defined in the class definition (see e.g. StringRef.h
empty()). I will have to test if /that/ doesn't create a warning ;)
-Johan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20151221/5c9115df/attachment.html>
More information about the llvm-dev
mailing list