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: [email protected]
          Reporter: [email protected]
                CC: [email protected], [email protected],
                    [email protected], [email protected]

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
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to