Bug 70129

Summary: [6 Regression] stdlib.h: No such file or directory when using -isystem /usr/include
Product: gcc Reporter: Markus Trippelsdorf <trippels>
Component: libstdc++Assignee: Not yet assigned to anyone <unassigned>
Status: RESOLVED WONTFIX    
Severity: normal CC: jakub, noloader, sjackman
Priority: P3    
Version: 6.0   
Target Milestone: ---   
See Also: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93506
Host: Target:
Build: Known to work:
Known to fail: Last reconfirmed:

Description Markus Trippelsdorf 2016-03-07 20:11:08 UTC
markus@x4 tmp % echo "#include<algorithm>" | g++ -x c++ -isystem /usr/include -
In file included from /usr/lib/gcc/x86_64-pc-linux-gnu/6.0.0/include/g++-v6/bits/stl_algo.h:59:0,
                 from /usr/lib/gcc/x86_64-pc-linux-gnu/6.0.0/include/g++-v6/algorithm:62,
                 from <stdin>:1:
/usr/lib/gcc/x86_64-pc-linux-gnu/6.0.0/include/g++-v6/cstdlib:75:25: fatal error: stdlib.h: No such file or directory
 #include_next <stdlib.h>
                         ^
compilation terminated.

gcc-5 and older is fine.
Comment 1 Jakub Jelinek 2016-03-07 20:23:43 UTC
Yeah, this is known, but I'm afraid there is nothing that can be done easily about it.  Just don't do it.
Well, in theory, we could slow everything down by adding yet another default include directory that would come after /usr/include in the default search scope, and would contain some fallback stdlib.h and math.h for these cases, but that would be too ugly.  So, IMHO just the packages that use this should either know what they are doing and put the C++ STL system headers first, or don't use STL, or don't mess with -isystem for the default directories.  The last one preferred.
Comment 2 Markus Trippelsdorf 2016-03-07 20:27:02 UTC
OK. Thanks.
Comment 3 chuck cranor 2017-10-31 18:33:48 UTC
If the only difference between "-isystem" and "-I" was the change in the
handling of warnings, the #include_next of stdlib.h in libstdc++ would not be
a problem.

The real problem here is that "-isystem /usr/include" changes the include
search path in a way that is incompatible with "-I /usr/include" e.g.

% cat try.cc
#include <cstdlib>
% g++ -c try.cc
% g++ -I /usr/include -c try.cc
% g++ -isystem /usr/include -c try.cc
In file included from try.cc:1:0:
/proj/testbed/data/travis/cache/gcc/include/c++/6.2.0/cstdlib:75:25: fatal error: stdlib.h: No such file or directory
 #include_next <stdlib.h>
                         ^
compilation terminated.
% 

I think you'll find most build systems that do "-isystem /usr/include"
instead of "-I /usr/include" are only using "-isystem" for the change
in the warning behavior.  The change in the include path order is not
wanted...
Comment 4 Jonathan Wakely 2017-10-31 18:36:30 UTC
Why do you need to use either option? /usr/include is already a system include dir, so -isystem /usr/include serves no useful purpose.
Comment 5 chuck cranor 2017-10-31 19:04:17 UTC
I don't think anyone would manually add "-isystem /usr/include" ...
but build systems that provide variables for third party headers that
may or may not be installed in /usr/include often trigger this.

e.g. if boost is installed in prefix /pkg, then you want to include
/pkg/include in the search path.   if boost is installed in /usr
then you want /usr/include in the search path.  if you have 
"-isystem ${BOOST_PREFIX}/include" in your CXXFLAGS and BOOST_PREFIX
happens to be set to /usr somewhere earlier, you lose.


For what it's worth, this definitely crops up in cmake-based builds:

https://gitlab.kitware.com/cmake/cmake/issues/16291

I triggered it with cmake and Boost on a Cray.  It is partly cmake's
fault too.  Its handling of CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES
isn't correct.
Comment 6 fiesh 2018-02-01 10:21:12 UTC
For what it's worth, I'd like to mention that what chuck mentions in the previous post can be used to circumvent the issue:

Setting
CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES
and
CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES
manually serves as a workaround until the CMake ticket is closed.

This took me quite a while to understand, so hopefully it helps someone else.
Comment 7 Shaun Jackman 2018-06-19 22:36:31 UTC
Thanks for reporting and trouble shooting this issue, Markus. This issue also affects the Linuxbrew package manager. See the downstream issue at https://github.com/Linuxbrew/brew/issues/724. It'd be great if this issue were addressed by GCC. Thanks to the trouble shooting here, we can work around the issue in the mean time.

Cheers,
Shaun
Comment 8 Jonathan Wakely 2018-06-19 23:02:16 UTC
(In reply to chuck cranor from comment #3)
> I think you'll find most build systems that do "-isystem /usr/include"
> instead of "-I /usr/include" are only using "-isystem" for the change
> in the warning behavior.  The change in the include path order is not
> wanted...

Then they should stop (mis)using -isystem, since it's clearly documented to affect the order directories are searched:

  If a standard system include directory, or a directory specified with
  -isystem, is also specified with -I, the -I option is ignored.  The directory
  is still searched but as a system directory at its normal position in the
  system include chain.  This is to ensure that GCC's procedure to fix buggy
  system headers and the ordering for the "#include_next" directive are not
  inadvertently changed.  If you really need to change the search order for
  system directories, use the -nostdinc and/or -isystem options.

The corollary is that you shouldn't use it unless you really need to change the search order for system directories!
Comment 9 Maxim Cournoyer 2020-01-21 03:24:23 UTC
(In reply to Jonathan Wakely from comment #8)
> (In reply to chuck cranor from comment #3)
> > I think you'll find most build systems that do "-isystem /usr/include"
> > instead of "-I /usr/include" are only using "-isystem" for the change
> > in the warning behavior.  The change in the include path order is not
> > wanted...
> 
> Then they should stop (mis)using -isystem, since it's clearly documented to
> affect the order directories are searched:
> 
>   If a standard system include directory, or a directory specified with
>   -isystem, is also specified with -I, the -I option is ignored.  The
> directory
>   is still searched but as a system directory at its normal position in the
>   system include chain.  This is to ensure that GCC's procedure to fix buggy
>   system headers and the ordering for the "#include_next" directive are not
>   inadvertently changed.  If you really need to change the search order for
>   system directories, use the -nostdinc and/or -isystem options.
> 
> The corollary is that you shouldn't use it unless you really need to change
> the search order for system directories!

About not using it: sure, this works, but now how can a project enable warnings just for their own headers and not those of the whole system?  This seems to be a valid use case.

In GNU Guix, we worked around the new behavior described here for GCC >= 6 by searching headers in CPATH rather than CPLUS_INCLUDE_PATH, because using CPLUS_INCLUDE_PATH would have the headers treated as system headers and break the required ordering of GCC's own headers.  The annoyance with using CPATH is that now warnings are issued for the whole collection of headers rather than just for those of the project being built.

I experimented with using CPLUS_INCLUDE_PATH and recommendations found here about making sure none of GCC's internal include paths were being duplicated through CPLUS_INCLUDE_PATH (e.g., those of glib and gcc) but the compilation still failed like this:

cd /tmp/guix-build-inkscape-1.0beta2_2019-12-03_2b71d25d45.drv-0/build/src/libnrtype && /gnu/store/br4id28zs2nx3p2r8nr5kfnk3qway45k-gcc-7.5.0/bin/c++  -DHAVE_CONFIG_H -DWITH_CSSBLEND -DWITH_CSSCOMPOSITE -DWITH_MESH -DWITH_SVG2 -I/tmp/guix-build-inkscape-1.0beta2_2019-12-03_2b71d25d45.drv-0/build/src/libnrtype -I/tmp/guix-build-inkscape-1.0beta2_2019-12-03_2b71d25d45.drv-0/inkscape-1.0beta2_2019-12-03_2b71d25d45/src/libnrtype -I/tmp/guix-build-inkscape-1.0beta2_2019-12-03_2b71d25d45.drv-0/inkscape-1.0beta2_2019-12-03_2b71d25d45 -I/tmp/guix-build-inkscape-1.0beta2_2019-12-03_2b71d25d45.drv-0/inkscape-1.0beta2_2019-12-03_2b71d25d45/src -I/tmp/guix-build-inkscape-1.0beta2_2019-12-03_2b71d25d45.drv-0/build/include -isystem /gnu/store/6081r9b5hdrwwfqljwsqsjqn8qvf18qz-libpng-1.6.37/include/libpng16 -isystem /gnu/store/vsba1vjxy0g47251mrrxrhlpqchlmgr3-libxml2-2.9.10/include/libxml2 -isystem /gnu/store/7y5kcq7pc31rq8y06pfifqi35x3nn0i2-libsoup-minimal-2.68.3/include/libsoup-2.4 -isystem /gnu/store/khyi8q7glb4h3xv1yaq6vq837z9y3rif-freetype-2.10.1/include/freetype2 -isystem /gnu/store/0d49ps0g5knrny1h8ijss65sb4i54dab-util-linux-2.34/include/uuid -isystem /gnu/store/0d49ps0g5knrny1h8ijss65sb4i54dab-util-linux-2.34/include/libmount -isystem /gnu/store/0d49ps0g5knrny1h8ijss65sb4i54dab-util-linux-2.34/include/blkid -isystem /gnu/store/1h4jsfampb408fs3kdzchnvjf21vk5jl-pango-1.42.4/include/pango-1.0 -isystem /gnu/store/rp02xwl91kb42zi2v7pxcc5jrvwixg36-glib-2.62.4/include/glib-2.0 -isystem /gnu/store/rp02xwl91kb42zi2v7pxcc5jrvwixg36-glib-2.62.4/lib/glib-2.0/include -isystem /gnu/store/3vkqx4lxlv09gr1674jw01akipvx9h9f-cairo-1.16.0/include/cairo -isystem /gnu/store/jj5a0qzzh556v8kis0xba69rsdg9v3n1-harfbuzz-2.6.4/include/harfbuzz -isystem /gnu/store/fdvbnbif5giqimfnmlza6ji8jax4lp9z-fribidi-1.0.7/include/fribidi -isystem /gnu/store/i9fi2nwynsigjis0gzlba3jl7s0wygwm-pixman-0.38.4/include/pixman-1 -isystem /gnu/store/01r2pxnkgsi039na193pfnz60di5lwln-libgc-7.6.12/include/gc -isystem /gnu/store/192b5i8pilw4kaysy8d6zsrcvfjaz8k7-poppler-0.83.0/include/poppler -isystem /gnu/store/llg2s8pqpsg4zprzvx0xcdrsaffvap5s-gdl-minimal-3.34.0/include/libgdl-3.0 -isystem /gnu/store/7lqlc6r8nmwavjhra4f3b4rfa8pkix1r-gtkmm-3.24.2/include/gtkmm-3.0 -isystem /gnu/store/7lqlc6r8nmwavjhra4f3b4rfa8pkix1r-gtkmm-3.24.2/lib/gtkmm-3.0/include -isystem /gnu/store/7lqlc6r8nmwavjhra4f3b4rfa8pkix1r-gtkmm-3.24.2/include/gdkmm-3.0 -isystem /gnu/store/7lqlc6r8nmwavjhra4f3b4rfa8pkix1r-gtkmm-3.24.2/lib/gdkmm-3.0/include -isystem /gnu/store/nz5vdsnx0dn7b36fq29fsq502vqzqx9q-gtk+-3.24.12/include/gtk-3.0/unix-print -isystem /gnu/store/nz5vdsnx0dn7b36fq29fsq502vqzqx9q-gtk+-3.24.12/include/gtk-3.0 -isystem /gnu/store/vcz9zfdph8d82d5gcgw8aibw2q58y1ha-glibmm-2.60.0/include/giomm-2.4 -isystem /gnu/store/vcz9zfdph8d82d5gcgw8aibw2q58y1ha-glibmm-2.60.0/lib/giomm-2.4/include -isystem /gnu/store/vcz9zfdph8d82d5gcgw8aibw2q58y1ha-glibmm-2.60.0/include/glibmm-2.4 -isystem /gnu/store/vcz9zfdph8d82d5gcgw8aibw2q58y1ha-glibmm-2.60.0/lib/glibmm-2.4/include -isystem /gnu/store/y9y6c06rb688qah8jh02nyq1yn7lgmg8-atkmm-2.28.0/include/atkmm-1.6 -isystem /gnu/store/xlx1fm4izk93ycm6nzbhbayrszwi3c6v-cairomm-1.12.2/include/cairomm-1.0 -isystem /gnu/store/xlx1fm4izk93ycm6nzbhbayrszwi3c6v-cairomm-1.12.2/lib/cairomm-1.0/include -isystem /gnu/store/sqp3808nfl3wpsb9sb8r35vxjdr74xaq-pangomm-2.42.0/include/pangomm-1.4 -isystem /gnu/store/sqp3808nfl3wpsb9sb8r35vxjdr74xaq-pangomm-2.42.0/lib/pangomm-1.4/include -isystem /gnu/store/vq3680fwrm9rjvcsz1nhik8dvm1xfh03-gdk-pixbuf+svg-2.40.0/include/gdk-pixbuf-2.0 -isystem /gnu/store/12an2dzlv3sfc5jfhbhq5xjbh3l5crhc-atk-2.32.0/include/atk-1.0 -isystem /gnu/store/vn6j6z9ya16rmhkj9k1f9ibg99w6sk4b-at-spi2-atk-2.32.0/include/at-spi2-atk/2.0 -isystem /gnu/store/rp02xwl91kb42zi2v7pxcc5jrvwixg36-glib-2.62.4/include/gio-unix-2.0 -isystem /gnu/store/vzaax511rrszjpzjihh2dj0dflq2zy1v-libsigc++-2.10.2/include/sigc++-2.0 -isystem /gnu/store/vzaax511rrszjpzjihh2dj0dflq2zy1v-libsigc++-2.10.2/lib/sigc++-2.0/include -isystem /gnu/store/y1k369jr0hsll9sx37w1chay1ivm2wjj-libdrm-2.4.99/include/libdrm -isystem /gnu/store/69zp5iqd7cqyl8vxv6jipq1wzw98mv8l-at-spi2-core-minimal-2.32.1/include/at-spi-2.0 -isystem /gnu/store/w13rab0229w2pg9b4610vdgzqsdn9c6k-dbus-1.12.16/include/dbus-1.0 -isystem /gnu/store/w13rab0229w2pg9b4610vdgzqsdn9c6k-dbus-1.12.16/lib/dbus-1.0/include  -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -Werror=format -Werror=format-security -pthread -fopenmp -O2 -g -DNDEBUG   -pthread -fPIC -std=gnu++11 -o CMakeFiles/nrtype_LIB.dir/FontInstance.cpp.o -c /tmp/guix-build-inkscape-1.0beta2_2019-12-03_2b71d25d45.drv-0/inkscape-1.0beta2_2019-12-03_2b71d25d45/src/libnrtype/FontInstance.cpp
In file included from /gnu/store/zw5f5g5aqlxam3imaylfla0i98nkridf-glibc-2.30/include/bits/posix1_lim.h:161:0,
                 from /gnu/store/zw5f5g5aqlxam3imaylfla0i98nkridf-glibc-2.30/include/limits.h:183,
                 from /gnu/store/bhn2mqpnxabmllh1kclrmkqp8mhhvjb0-gcc-7.5.0-lib/lib/gcc/x86_64-unknown-linux-gnu/7.5.0/include-fixed/limits.h:194,
                 from /gnu/store/bhn2mqpnxabmllh1kclrmkqp8mhhvjb0-gcc-7.5.0-lib/lib/gcc/x86_64-unknown-linux-gnu/7.5.0/include-fixed/syslimits.h:7,
                 from /gnu/store/bhn2mqpnxabmllh1kclrmkqp8mhhvjb0-gcc-7.5.0-lib/lib/gcc/x86_64-unknown-linux-gnu/7.5.0/include-fixed/limits.h:34,
                 from /gnu/store/khyi8q7glb4h3xv1yaq6vq837z9y3rif-freetype-2.10.1/include/freetype2/freetype/config/ftstdlib.h:59,
                 from /gnu/store/khyi8q7glb4h3xv1yaq6vq837z9y3rif-freetype-2.10.1/include/freetype2/freetype/config/ftconfig.h:41,
                 from /gnu/store/khyi8q7glb4h3xv1yaq6vq837z9y3rif-freetype-2.10.1/include/freetype2/freetype/freetype.h:33,
                 from /gnu/store/khyi8q7glb4h3xv1yaq6vq837z9y3rif-freetype-2.10.1/include/freetype2/freetype/ftoutln.h:25,
                 from /tmp/guix-build-inkscape-1.0beta2_2019-12-03_2b71d25d45.drv-0/inkscape-1.0beta2_2019-12-03_2b71d25d45/src/libnrtype/FontInstance.cpp:22:
/gnu/store/zw5f5g5aqlxam3imaylfla0i98nkridf-glibc-2.30/include/bits/local_lim.h:38:10: fatal error: linux/limits.h: No such file or directory
 #include <linux/limits.h>
          ^~~~~~~~~~~~~~~~
compilation terminated.

The above -isystem directives were populated by the CMake build system of Inkscape 1.0 beta2, and the environment variable CPLUS_INCLUDE_PATH below was in effect: CPLUS_INCLUDE_PATH:/gnu/store/mvm8lfh6fj8dm2m46bnnyg2ap6v9q57y-linux-libre-headers-4.19.56/include:/gnu/store/18piyd08w9b7j08yz1lj62kkmha3llx1-googletest-1.8.1/include:/gnu/store/0hwmh6bh0kgcmk88za2lsa5bv4vi05ci-bzip2-1.0.6/include:/gnu/store/81b77pazf968avgghvn8rxfrs8k612xw-xz-5.2.4/include:/gnu/store/5q3bwf9y426w38bxbw3jwbhjhr0rmawf-file-5.37/include:/gnu/store/yshmqw3avy3d2w58zd3vmqg5p0khr0bd-gawk-5.0.1/include:/gnu/store/iirahlxlv27dl0rqh3k9p71fcyan1hg2-make-4.2.1/include:/gnu/store/rc6a6s09kmk1g8pa7m8r127yg59lcvhs-binutils-2.33.1/include:/gnu/store/6ifw1pxap7y9flmisg5sip9lpyj9bxxd-aspell-0.60.8/include:/gnu/store/ffsc3ih1hysi4mb8h6xdr0kymbhssbd0-double-conversion-3.1.5/include:/gnu/store/llg2s8pqpsg4zprzvx0xcdrsaffvap5s-gdl-minimal-3.34.0/include:/gnu/store/7lqlc6r8nmwavjhra4f3b4rfa8pkix1r-gtkmm-3.24.2/include:/gnu/store/nz5vdsnx0dn7b36fq29fsq502vqzqx9q-gtk+-3.24.12/include:/gnu/store/knalzdhfjm6jknrm9q039cadw6zl9zx9-gsl-2.6/include:/gnu/store/192b5i8pilw4kaysy8d6zsrcvfjaz8k7-poppler-0.83.0/include:/gnu/store/4cl71hr4ba08b876ajj6l0sg91k9dp13-libjpeg-9c/include:/gnu/store/6081r9b5hdrwwfqljwsqsjqn8qvf18qz-libpng-1.6.37/include:/gnu/store/vsba1vjxy0g47251mrrxrhlpqchlmgr3-libxml2-2.9.10/include:/gnu/store/6aw27kj4j6k1mw3c8z3m085gz46k6hqc-libxslt-1.1.34/include:/gnu/store/01r2pxnkgsi039na193pfnz60di5lwln-libgc-7.6.12/include:/gnu/store/7y5kcq7pc31rq8y06pfifqi35x3nn0i2-libsoup-minimal-2.68.3/include:/gnu/store/khyi8q7glb4h3xv1yaq6vq837z9y3rif-freetype-2.10.1/include:/gnu/store/qm22az1mlbr3p1idp0czn82kdkmhdyln-popt-1.16/include:/gnu/store/zwfw59kvv3891gkpidiz2l0377hsf6fh-potrace-1.15/include:/gnu/store/v0vdzm9fmmicixg3fkr6c9jpbf9h7vq3-lcms-2.9/include:/gnu/store/8b6r1vzl207i5b978xvv77mhm8rbnsz0-boost-1.70.0/include:/gnu/store/w4nbizjyn1das7k4skws2fspzw8nir7k-gettext-minimal-0.20.1/include:/gnu/store/h4im9xr6q3kry43pw5r0rrwkcqkjdaw7-zlib-1.2.11/include:/gnu/store/hjybmczw7ha989200p9cjmsmn2disakv-libselinux-3.0/include:/gnu/store/0d49ps0g5knrny1h8ijss65sb4i54dab-util-linux-2.34/include:/gnu/store/9lwgb7z8p1m0kysbjadjrgjpvrjzj9ws-libffi-3.3/include:/gnu/store/6bmsxp85cnzc9zinv7jx1sm86ip3yapp-pcre-8.43/include:/gnu/store/yx37pnwf56871n0nmf56wm3hwmv3mc33-python-3.7.4/include:/gnu/store/vcz9zfdph8d82d5gcgw8aibw2q58y1ha-glibmm-2.60.0/include:/gnu/store/y9y6c06rb688qah8jh02nyq1yn7lgmg8-atkmm-2.28.0/include:/gnu/store/xlx1fm4izk93ycm6nzbhbayrszwi3c6v-cairomm-1.12.2/include:/gnu/store/sqp3808nfl3wpsb9sb8r35vxjdr74xaq-pangomm-2.42.0/include:/gnu/store/n715a7k336gp1j4gwvyr5jqvq5hixgaa-wayland-1.18.0/include:/gnu/store/1h4jsfampb408fs3kdzchnvjf21vk5jl-pango-1.42.4/include:/gnu/store/9gmxzvw2zap9vbcpxlidn7i2rl1h0r6h-mesa-19.2.1/include:/gnu/store/833l81h0mwv4ar0rnrv3i9jnvr09jmvk-libxrandr-1.5.2/include:/gnu/store/2mznp77d4m8brv9mwj4sahxb7hjz6m0q-libxdamage-1.1.5/include:/gnu/store/5mmq8ck50gzxvxxw0p2p4cgzc0ykvki8-libxkbcommon-0.8.4/include:/gnu/store/pyl4hw1ggm1akzg7drk69ljcdc0fcm96-libxinerama-1.1.4/include:/gnu/store/r1inaxc74m3zpy5x60si5v2vz8mjix48-libxi-1.7.10/include:/gnu/store/i5vmy38792w61i41k8hlzdmmbz3ii7ca-libxcursor-1.2.0/include:/gnu/store/8q3waxhxaxmadwr5ws7qifcqwmjdhqqk-libepoxy-1.5.3/include:/gnu/store/vq3680fwrm9rjvcsz1nhik8dvm1xfh03-gdk-pixbuf+svg-2.40.0/include:/gnu/store/12an2dzlv3sfc5jfhbhq5xjbh3l5crhc-atk-2.32.0/include:/gnu/store/vn6j6z9ya16rmhkj9k1f9ibg99w6sk4b-at-spi2-atk-2.32.0/include:/gnu/store/rp02xwl91kb42zi2v7pxcc5jrvwixg36-glib-2.62.4/include:/gnu/store/10h3cm6rsyjh9lgp46s85pm8jlwfvmrf-sqlite-3.30.1/include:/gnu/store/m7lsc5dyky2c0mdadvz0gaqqazkzbla2-libpsl-0.21.0/include:/gnu/store/df9p8q4za50c59bmln2f89yff6vph5bx-google-brotli-1.0.7/include:/gnu/store/sp19znx65dqzq56fli5475s86dn8b939-libsepol-3.0/include:/gnu/store/vzaax511rrszjpzjihh2dj0dflq2zy1v-libsigc++-2.10.2/include:/gnu/store/3vkqx4lxlv09gr1674jw01akipvx9h9f-cairo-1.16.0/include:/gnu/store/164lwl0dr12x9da52p4wfdra10skh8cr-fontconfig-2.13.1/include:/gnu/store/jj5a0qzzh556v8kis0xba69rsdg9v3n1-harfbuzz-2.6.4/include:/gnu/store/fdvbnbif5giqimfnmlza6ji8jax4lp9z-fribidi-1.0.7/include:/gnu/store/dxj77l1hpgsrxcm80abin4x24zl3ms1d-xorgproto-2019.2/include:/gnu/store/5fvxdqig0384rmcz3inpbvfjiw772yb3-libxxf86vm-1.1.4/include:/gnu/store/48xvy1qjzqn3nlz7wv4bvfv82a2kxwk6-libxshmfence-1.3/include:/gnu/store/ldpwhbs3l6s4qx2y9mvj5hpblpzddvql-libxfixes-5.0.3/include:/gnu/store/d8ikrvmqn5df07llwj1qvpgrr18gams7-libx11-1.6.9/include:/gnu/store/sxyn2wfshm2kdrgsb4iy3h7cja861spf-libvdpau-1.3/include:/gnu/store/y1k369jr0hsll9sx37w1chay1ivm2wjj-libdrm-2.4.99/include:/gnu/store/73pswbvf7a9qfgjk5gh2fc7xbvhz21s4-libxrender-0.9.10/include:/gnu/store/ll0rn5raafbqxnya05175g9ki3hm95a5-libxext-1.3.4/include:/gnu/store/69zp5iqd7cqyl8vxv6jipq1wzw98mv8l-at-spi2-core-minimal-2.32.1/include:/gnu/store/i9fi2nwynsigjis0gzlba3jl7s0wygwm-pixman-0.38.4/include:/gnu/store/dq2lr3mxj5fc4ycsx7q50jxn7drqcwl1-expat-2.2.9/include:/gnu/store/qs93yffifzq8z1pvgdkz8pimrn746wbl-icu4c-65.1/include:/gnu/store/gl14cajxhxl7ck17md3i5q6w7k14vgpf-graphite2-1.3.13/include:/gnu/store/q50c5jwgimqifl5h98cib7iqq556iy2m-libxcb-1.13/include:/gnu/store/5wpib3l68nan7v78my5i6ffcwhzid4gd-libxtst-1.2.3/include:/gnu/store/w13rab0229w2pg9b4610vdgzqsdn9c6k-dbus-1.12.16/include:/gnu/store/ndajhnchm2q4gg99ibnzc9i3rmwsm2kb-libxdmcp-1.1.3/include:/gnu/store/h9682937xqyyv4svh9z5568x9zw6w48j-libxau-1.0.9/include

Could it be because including headers from standard includes (before they are searched) cause them to be loaded (not in the order we'd expect them to?). If confirmed, this would make it even more slippery to use -isystem for anything but messing with the standard include paths.

This bug is closed, but I thought I'd write this here so that it is known that it is still causing headaches at least for some and that the workarounds proposed don't work for all scenarios.
Comment 10 Jonathan Wakely 2020-01-21 14:30:38 UTC
(In reply to Maxim Cournoyer from comment #9)
> About not using it: sure, this works, but now how can a project enable
> warnings just for their own headers and not those of the whole system?  This
> seems to be a valid use case.

This works, but is tedious to do for every warning:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
#include <third-party-library/header.h>
#pragma GCC diagnostic pop
Comment 11 Maxim Cournoyer 2020-01-22 01:52:49 UTC
(In reply to Jonathan Wakely from comment #10)
> (In reply to Maxim Cournoyer from comment #9)
> > About not using it: sure, this works, but now how can a project enable
> > warnings just for their own headers and not those of the whole system?  This
> > seems to be a valid use case.
> 
> This works, but is tedious to do for every warning:
> 
> #pragma GCC diagnostic push
> #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
> #pragma GCC diagnostic ignored "-Wunused-local-typedefs"
> #include <third-party-library/header.h>
> #pragma GCC diagnostic pop

Thanks for the trick.  Agreed that it is tedious, but still good to know.  About my previous comment saying that the workaround of not including any GCC standard include directory in -isystem (or CPLUS_INCLUDE_PATH), the problem was that I had set CPLUS_INCLUDE_PATH but not C_INCLUDE_PATH, and Inkscape goes on to build bundled libraries which are C, not C++.  Hence, the Linux kernel headers really were not present in any include search path for a C program.  Apologies for the noise.