Bug 1775294 - glibc: Avoid invalid __has_include in <sys/stat.h>
Summary: glibc: Avoid invalid __has_include in <sys/stat.h>
Alias: None
Product: Red Hat Enterprise Linux 8
Classification: Red Hat
Component: glibc
Version: 8.2
Hardware: Unspecified
OS: Unspecified
Target Milestone: rc
: 8.2
Assignee: Florian Weimer
QA Contact: qe-baseos-tools-bugs
Depends On:
TreeView+ depends on / blocked
Reported: 2019-11-21 17:01 UTC by Florian Weimer
Modified: 2020-06-28 11:20 UTC (History)
9 users (show)

Fixed In Version: glibc-2.28-97.el8
Doc Type: No Doc Update
Doc Text:
Clone Of:
Last Closed: 2020-04-28 16:50:25 UTC
Type: Bug
Target Upstream Version:

Attachments (Terms of Use)

System ID Priority Status Summary Last Updated
Red Hat Product Errata RHSA-2020:1828 None None None 2020-04-28 16:50:36 UTC
Sourceware 25189 P2 RESOLVED glibc's __glibc_has_include causes issues with clang -frewrite-includes 2020-04-14 14:08:15 UTC

Description Florian Weimer 2019-11-21 17:01:12 UTC
Bug 1699194 added a construct to use the <linux/stat.h> when available. However, due to the way __has_include is defined in C++, the macro wrapper is invalid and breaks some build environments. We should backport this upstream commit:

commit bfa864e1645e140da2e1aae3cf0d0ba0674f6eb5
Author: Emilio Cobos Álvarez <emilio@crisal.io>
Date:   Tue Nov 12 19:18:32 2019 +0100

    Don't use a custom wrapper macro around __has_include (bug 25189).
    This causes issues when using clang with -frewrite-includes to e.g.,
    submit the translation unit to a distributed compiler.
    In my case, I was building Firefox using sccache.
    See [1] for a reduced test-case since I initially thought this was a
    clang bug, and [2] for more context.
    Apparently doing this is invalid C++ per [cpp.cond], which mentions [3]:
    > The #ifdef and #ifndef directives, and the defined conditional
    > inclusion operator, shall treat __has_include and __has_cpp_attribute
    > as if they were the names of defined macros.  The identifiers
    > __has_include and __has_cpp_attribute shall not appear in any context
    > not mentioned in this subclause.
    [1]: https://bugs.llvm.org/show_bug.cgi?id=43982
    [2]: https://bugs.llvm.org/show_bug.cgi?id=37990
    [3]: http://eel.is/c++draft/cpp.cond#7.sentence-2
    Change-Id: Id4b8ee19176a9e4624b533087ba870c418f27e60

Comment 2 Sergey Kolosov 2020-03-26 12:30:10 UTC
Verified, __has_include is not used inside another macro, statx.h is includable with -frewrite-includes.

Comment 4 errata-xmlrpc 2020-04-28 16:50:25 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.


Note You need to log in before you can comment on or make changes to this bug.