Red Hat Bugzilla – Bug 702256
clang++ gives many errors when the c++ standard library is used
Last modified: 2011-11-14 03:16:19 EST
Description of problem:
Instead of working as it used to, clang++ fails to compile
anything that includes almost any headers from the C++
standard library. At least these headers have triggered
the problem for me:
Headers which do not seem to trigger the problem:
Version-Release number of selected component (if applicable):
Easily by trying to compile a sample program that
#includes something from the C++ standard library.
Steps to Reproduce:
1. Write a program.cpp where you #include <vector>
or some other common header from the standard
2. clang++ -c program.cpp
Lots of errors, sample output should be in the attachments.
Succesfully compiled program.o file in current working directory.
Found some discussion probably relevant to the bug here:
Created attachment 497005 [details]
output from running the compiler on a simple program
Clang 2.8 can't handle the GNU extensions we use in recent versions of libstdc++, I think 3.0 fares a little better, but for clang++ to be at all useful Fedora needs to ship an old set of libstdc++ headers for Clang to use (or ship libc++ but I don't know if that is usable on GNU/Linux)
It would be good to upgrade to Clang 3.0 anyway, it has a number of bugfixes for C++ and at least one new warning that's found a real bug for me
Unfortunately we can't update the LLVM/clang stack on existing Fedora versions -- LLVM is used by some key components (e.g. mesa). Fedora 16 will get clang 2.9.
Upgrading to 3.0 was only a suggestion, but IIUC would still not allow clang++ to use the libstdc++ 4.6 headers shipped with Fedora, which is what this bug is actually about.
Does clang 2.9 work for trivial C++ code? If not, what about using an alternative set of libstdc++ headers from an older GCC?
clang-3.0-0.1.rc3.fc17.i686 in current Rawhide seems to work much just fine when used with libstdc++. Hopefully Fedora 17 will end up with a working combination of clang and libstdc++.