Hi,

Sylvestre Ledru wrote:
On 14/04/2014 21:40, Ben Longbons wrote:
Package: clang-3.4
Version: 1:3.4-2
Severity: grave
Justification: renders package unusable

Dear Maintainer,

clang 3.4 can't use libstdc++ 4.9's headers, due to changes in
<bits/c++config.h>
Thanks for the bug report.
For now, it is just normal severity:
* we are still using gcc 4.8 as default

Indeed, and clang itself is still buildable with gcc 4.8, but that isn't the main issue here.

Rather the issue is that compiling user programs with clang breaks: C++11 code (and possibly other C++ standard levels, but I didn't test) that includes the <cstddef> header will fail to compile if the libstdc++-4.9-dev package is installed, which will happen, for instance, if someone installs g++-4.9. I think this qualifies the bug as at least 'important', if not 'grave'.

* gcc 4.9 has not (yet) been released.

It has now been released, and is available in testing for most architectures. I installed g++-4.9 to try it out; doing so broke compilation with clang++.

Upstream has discussed the problem and has fixes for it; it requires these two patches to llvm:

http://llvm.org/viewvc/llvm-project?view=revision&revision=201729
http://llvm.org/viewvc/llvm-project?view=revision&revision=201843

Upstream mailing list discussion regarding the two above changes is here:

http://lists.cs.uiuc.edu/pipermail/llvmdev/2014-May/072711.html


I've applied the patches locally and can verify that they do solve the problem. Here's a simple example of the error without the patches applied:

jagerman@loki:~$ cat test.cpp
#include <iostream>
#include <cstddef>
int main() { std::cout << "hi!\n"; }

jagerman@loki:~$ clang++ -std=c++11 test.cpp
In file included from test.cpp:2:
/usr/bin/../lib/gcc/x86_64-linux-gnu/4.9/../../../../include/c++/4.9/cstddef:51:11: error:
      no member named 'max_align_t' in the global namespace
  using ::max_align_t;
        ~~^
1 error generated.



Jason Rhinelander

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Reply via email to