https://bugs.llvm.org/show_bug.cgi?id=37784

            Bug ID: 37784
           Summary: clang does not define __GNUC_GNU_INLINE__
           Product: clang
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: Frontend
          Assignee: unassignedclangb...@nondot.org
          Reporter: ndesaulni...@google.com
                CC: lloz...@chromium.org, llvm-bugs@lists.llvm.org,
                    manojgu...@google.com, srhi...@google.com

In the linux kernel, we prefer to use gnu89 semantics for extern inline
functions.  Writing a feature test for the attribute gnu_inline should be
straightforward, except that gcc did not get __has_attribute until 5.1. 
Instead, older versions of gcc define __GNUC_GNU_INLINE__ if that attribute is
supported.  It seems that clang does not, which makes writing a feature test a
little wonky:

#ifdef __GNUC_GNU_INLINE__
#define __gnu_inline __attribute__((gnu_inline))
#else
#define __gnu_inline
#warning "No gnu inline"
#endif

produces a warning in clang.

We can likely work around this via:

#ifndef __has_attribute         // Optional of course.
#define __has_attribute(x) 0  // Compatibility with non-clang compilers.
#endif

#if defined(__GNUC_GNU_INLINE__) || __has_attribute(gnu_inline)
#define __gnu_inline __attribute__(gnu_inline)
#endif

-- 
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to