Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 05 Oct 2016 01:33:13 +0000
From:      bugzilla-noreply@freebsd.org
To:        freebsd-bugs@FreeBSD.org
Subject:   [Bug 213217] Passing -isystem <sysroot>/usr/include to clang breaks C++ compilation
Message-ID:  <bug-213217-8@https.bugs.freebsd.org/bugzilla/>

next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D213217

            Bug ID: 213217
           Summary: Passing -isystem <sysroot>/usr/include to clang breaks
                    C++ compilation
           Product: Base System
           Version: CURRENT
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Many People
          Priority: ---
         Component: bin
          Assignee: freebsd-bugs@FreeBSD.org
          Reporter: gonzo@FreeBSD.org

Created attachment 175436
  --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=3D175436&action=
=3Dedit
test case

To reproduce this bug run following command:
% clang++ -isystem /usr/include test.cpp
In file included from test.cpp:1:
/usr/include/c++/v1/cstddef:43:15: fatal error: 'stddef.h' file not found
#include_next <stddef.h>
              ^
1 error generated.

File compiles fine without -isystem flag:
% clang++  test.cpp
%

The problem is that stddef.h is clang's internal header and supposed to be =
in
/usr/bin/../lib/clang/3.8.0/include. But since it conflicts with freebsd's
stddef.h we do not install it and append /usr/include to the list of include
dirs:
% clang++  -v test.cpp
FreeBSD clang version 3.8.0 (tags/RELEASE_380/final 262564) (based on LLVM
3.8.0)
.. skipped ...
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/c++/v1
 /usr/bin/../lib/clang/3.8.0/include
 /usr/include
End of search list.

But when we pass -isystem /usr/include, clang removes appended dir as a
duplicate and search path looks like this:
% clang++ -v -isystem /usr/include test.cpp
FreeBSD clang version 3.8.0 (tags/RELEASE_380/final 262564) (based on LLVM
3.8.0)
.. skipped ..
ignoring duplicate directory "/usr/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include
 /usr/include/c++/v1
 /usr/bin/../lib/clang/3.8.0/include
End of search list.

#include_next does not go through whole list, only from the directory where=
 its
parent file is located

Some third-party software passes -isystem for cross-compilation cases alogn
with --sysroot, namely Qt does it like this:
c++ ... --sysroot=3D/src/FreeBSD/tftproot/rpi/ ...  -isystem
/src/FreeBSD/tftproot/rpi/usr/include ...

and this bug breaks cross-compilation

--=20
You are receiving this mail because:
You are the assignee for the bug.=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-213217-8>