3
0
Fork 0
forked from mirrors/nixpkgs

stdenv-darwin: Revert to clang 3.3

In 3.3, a C++ class defined in a header will get a typeinfo symbol
like this (e.g. in Nix's src/libutil/util.o):

  (__DATA,__datacoal_nt) weak external typeinfo for nix::BaseError

But in 3.4, this has changed to:

  (__DATA,__datacoal_nt) weak external automatically hidden typeinfo for nix::BaseError

This causes the linker to change the symbol to:

  (__DATA,__data) non-external (was signed char private external) typeinfo for nix::BaseError

i.e. losing its weak linkage. But without weak linkage, dynamic_cast
and other RTTI-based mechanisms (such as catching an exception of a
certain type) don't work across shared libraries / executables.

The clang compiler in the SDK doesn't have this behaviour, but it's
not clear exactly which version it is (it just says "based on LLVM
3.4svn").
This commit is contained in:
Eelco Dolstra 2014-10-15 01:15:31 +02:00
parent d7abe3bada
commit 9a979af1d3
2 changed files with 1 additions and 2 deletions

View file

@ -1,6 +1,6 @@
{ stdenv, pkgs, config
, haveLibCxx ? true
, useClang33 ? false }:
, useClang33 ? true }:
import ../generic rec {
inherit config;

View file

@ -11856,7 +11856,6 @@ let
};
nixUnstable = callPackage ../tools/package-management/nix/unstable.nix {
stdenv = if stdenv.isDarwin then allStdenvs.stdenvDarwin33 else stdenv;
storeDir = config.nix.storeDir or "/nix/store";
stateDir = config.nix.stateDir or "/nix/var";
};