From 9a979af1d3bf92e7ebe85332852b2c95bdf0aa04 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 15 Oct 2014 01:15:31 +0200 Subject: [PATCH] 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"). --- pkgs/stdenv/darwin/default.nix | 2 +- pkgs/top-level/all-packages.nix | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/pkgs/stdenv/darwin/default.nix b/pkgs/stdenv/darwin/default.nix index 26114d2726e1..cbc9a38b77de 100644 --- a/pkgs/stdenv/darwin/default.nix +++ b/pkgs/stdenv/darwin/default.nix @@ -1,6 +1,6 @@ { stdenv, pkgs, config , haveLibCxx ? true -, useClang33 ? false }: +, useClang33 ? true }: import ../generic rec { inherit config; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index cf5099b3673a..229c59f3b6ee 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -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"; };