Bug 1775294

Summary: glibc: Avoid invalid __has_include in <sys/stat.h>
Product: Red Hat Enterprise Linux 8 Reporter: Florian Weimer <fweimer>
Component: glibcAssignee: Florian Weimer <fweimer>
Status: CLOSED ERRATA QA Contact: qe-baseos-tools-bugs
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 8.2CC: ashankar, codonell, dj, fweimer, mnewsome, pasteur, pfrankli, simon.giesecke, skolosov
Target Milestone: rcKeywords: Bugfix, Patch
Target Release: 8.2   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: glibc-2.28-97.el8 Doc Type: No Doc Update
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2020-04-28 16:50:25 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

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>
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.

https://access.redhat.com/errata/RHSA-2020:1828