[llvm-bugs] [Bug 37784] New: clang does not define __GNUC_GNU_INLINE__

via llvm-bugs llvm-bugs at lists.llvm.org
Tue Jun 12 11:21:12 PDT 2018


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: unassignedclangbugs at nondot.org
          Reporter: ndesaulniers at google.com
                CC: llozano at chromium.org, llvm-bugs at lists.llvm.org,
                    manojgupta at google.com, srhines at 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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20180612/8818c9a6/attachment.html>


More information about the llvm-bugs mailing list