I have multiple gcc versions installed (4.3.4, 4.4.5, 4.5.3, 4.6.1) with 4.5.3 being the default one. When emerging sys-devel/clang with the system-cxx-headers (default on) use flag, the resulting clang++ binary uses the C++ stl headers from gcc 4.5.3 but tries to link against the libraries from gcc 4.4.5 (including libstdc++) This can cause programs to fail to compile because of missing symbols. Reproducible: Always Steps to Reproduce: 1. Emerge =sys-devel/clang-2.9 with USE=system-cxx-headers 2. Use clang++ to compile a program that uses the erase method from std::list Actual Results: The program fails to compile because of undefined references to std::_List_node_base::_M_unhook() Expected Results: The program compiles successfully The program compiles fine if clang was emerged without the system-cxx-headers use flag. It also worked fine with gcc 4.5.2 instead of gcc 4.5.3 (4.5.2 seems to be on clangs list of hardcoded search paths, but 4.5.3 isn't)
Created attachment 283207 [details] Testcase that fails to compile with clang++ compiled with USE=system-cxx-headers
Created attachment 283209 [details] clang++ -v -O0 test.cpp -Wl,--verbose output for clang compiled with USE=system-cxx-headers
Created attachment 283211 [details] clang++ -v -O0 test.cpp -Wl,--verbose output for clang compiled with USE=-system-cxx-headers
emerge --info output: Portage 2.2.0_alpha51 (default/linux/amd64/10.0, gcc-4.5.3, glibc-2.12.2-r0, 2.6.39-gentoo-r1 x86_64) ================================================================= System uname: Linux-2.6.39-gentoo-r1-x86_64-AMD_Phenom-tm-_9750_Quad-Core_Processor-with-gentoo-2.0.3 Timestamp of tree: Fri, 12 Aug 2011 19:30:01 +0000 ccache version 2.4 [enabled] app-shells/bash: 4.2_p10 dev-java/java-config: 2.1.11-r3 dev-lang/python: 2.7.1-r1, 3.1.3-r1 dev-util/ccache: 2.4-r9 dev-util/cmake: 2.8.5-r2 dev-util/pkgconfig: 0.26 sys-apps/baselayout: 2.0.3 sys-apps/openrc: 0.8.3-r1 sys-apps/sandbox: 2.5 sys-devel/autoconf: 2.13, 2.68 sys-devel/automake: 1.9.6-r3, 1.11.1-r1 sys-devel/binutils: 2.21.1 sys-devel/gcc: 4.3.4, 4.4.5, 4.5.3, 4.6.1 sys-devel/gcc-config: 1.4.1-r1 sys-devel/libtool: 2.4-r1 sys-devel/make: 3.82 sys-kernel/linux-headers: 2.6.38 (virtual/os-headers) sys-libs/glibc: 2.12.2 Repositories: gentoo games multimedia zugaina gamerlay-stable kde local-repo Installed sets: @kdeadmin, @kdeartwork, @kdebase, @kdegraphics, @kdeutils, @system ACCEPT_KEYWORDS="amd64" ACCEPT_LICENSE="* -@EULA" CBUILD="x86_64-pc-linux-gnu" CFLAGS="-O2 -pipe -O2 -march=amdfam10 -ggdb -pipe" CHOST="x86_64-pc-linux-gnu" CONFIG_PROTECT="/etc /usr/share/config /usr/share/gnupg/qualified.txt /usr/share/maven-bin-3.0/conf" CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/env.d/java/ /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo /etc/texmf/language.dat.d /etc/texmf/language.def.d /etc/texmf/updmap.d /etc/texmf/web2c" CXXFLAGS="-O2 -pipe -O2 -march=amdfam10 -ggdb -pipe" DISTDIR="/usr/portage/distfiles" FEATURES="assume-digests binpkg-logs ccache distlocks ebuild-locks fixlafiles fixpackages news parallel-fetch preserve-libs protect-owned sandbox sfperms splitdebug strict unknown-features-warn unmerge-logs unmerge-orphans userfetch" FFLAGS="" GENTOO_MIRRORS="http://distfiles.gentoo.org" LANG="en_US.utf8" LC_ALL="en_US.utf8" LDFLAGS="-Wl,-O1 -Wl,--as-needed" MAKEOPTS=" -j5" PKGDIR="/usr/portage/packages" PORTAGE_CONFIGROOT="/" PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --stats --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages" PORTAGE_TMPDIR="/var/tmp" PORTDIR="/usr/portage" PORTDIR_OVERLAY="/var/lib/layman/games /var/lib/layman/multimedia /var/lib/layman/zugaina /var/lib/layman/gamerlay /var/lib/layman/kde /usr/local/portage" SYNC="rsync://rsync.gentoo.org/gentoo-portage" USE="3dnow 3dnowext X X11 acl alsa amd64 bash-completion berkdb bzip2 cli consolekit cracklib crypt cups cxx dbus dri fortran gdbm gpm iconv ipv6 j2k jpeg2k kde kde4 lm_sensors mmx mmxext modules mudflap multilib ncurses nls nptl nptlonly openexr opengl openmp pam pch pcre perl png poliicykit pppd python qt qt4 readline sdl semantic-desktop session sse sse2 sse3 ssl ssse3 sysfs tcpd threads truetype udev unicode x11 xgl xorg xv zlib" ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci" ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mmap_emul mulaw multi null plug rate route share shm softvol" APACHE2_MODULES="actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="braindump flow karbon kexi kpresenter krita tables words" CAMERAS="canon directory ptp2 template" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ubx" INPUT_DEVICES="keyboard mouse evdev" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" PHP_TARGETS="php5-3" RUBY_TARGETS="ruby18" SANE_BACKENDS="hp*" USERLAND="GNU" VIDEO_CARDS="radeon" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark ipmark dhcpmac delude chaos account" Unset: CPPFLAGS, CTARGET, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LINGUAS, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS
Hi, thanks for the detailed report and testcase! I cannot check this bug this week, but it may have been fixed in clang-2.9-r1 (from bug #377949). Too bad setting the paths is only halfway-done at the moment (only c++ headers, not crtbegin.o, libgcc, ...), as this mixes hardcoded paths and lookups through a list of candidate paths...
sys-devel/clang-2.9-r1 does indeed fix this bug, at least for the testcase and for the programs I tried
Thanks for checking! So this is "fixed with clang-2.9-r1, even if for now this is still a workaround