[LLVMdev] Non-deterministic builds

John McCall rjmccall at apple.com
Fri Nov 12 10:38:03 PST 2010


On Nov 12, 2010, at 7:10 AM, Sebastian Redl wrote:

> On 12.11.2010 15:26, Erik Cederstrand wrote:
>> I have noticed that two consecutive builds of clang, clang++ and tblgen don't produce identical binaries (as in md5 sums) on identical source code (I'm on FreeBSD). I ran strings(1) on the two clang binaries, and I get the following:
>> 251862c251862
>> <  N4llvm3sys11ThreadLocalIKN144_GLOBAL__N__usr_home_erik_freebsd_head_src_lib_clang_libllvmsupport_.._.._.._contrib_llvm_lib_Support_CrashRecoveryContext.cpp_00000000_BFDB511124CrashRecoveryContextImplEEE
>> ---
>>> N4llvm3sys11ThreadLocalIKN144_GLOBAL__N__usr_home_erik_freebsd_head_src_lib_clang_libllvmsupport_.._.._.._contrib_llvm_lib_Support_CrashRecoveryContext.cpp_00000000_A7307A7424CrashRecoveryContextImplEEE
>> 
> Urgh, are we using random elements in the unnamed namespace symbol 
> generation?


This is definitely not the direct output of clang.  We mangle anonymous namespaces the same way that GCC does, i.e. 12_GLOBAL__N_1.  If there's a compiler that mangles filenames into anonymous namespace names — or anything later in the toolchain which does it — I'm not aware of it.

Erik, what compiler are you using?

John.



More information about the llvm-dev mailing list