I work on a small c++ project named yans (http://yans.inria.fr). Whenever I try to perform a profile-directed optimized build, I get the following errors with the FC5-provided compiler: src/ipv4/ipv4-end-point.cc: In function ‘void<unnamed>::invoke_now(yans::Callback<void, yans::Ipv4EndPoint*, yans::empty, yans::empty, yans::empty>, yans::Ipv4EndPoint*)’: src/ipv4/ipv4-end-point.cc:92: error: coverage mismatch for function ‘_ZN55_GLOBAL__N_src_ipv4_ipv4_end_point.cc_00000000_D34075F610invoke_nowEN4yans8CallbackIvPNS0_12Ipv4EndPointENS0_5emptyES4_S4_EES3_’ while reading counter ‘arcs’ src/ipv4/ipv4-end-point.cc:92: error: checksum is 1b860dda instead of 69a79691 This obviously happens during the profile-directed optimized rebuild following a single run of my benchmarking application. To reproduce: 1) download the code hg clone http://yans.inria.fr/code/yans yans-buggy cd yans-buggy hg revert -r a0534ece96ea 2) build the code make opti-arc This code relies on gnu make 0.80 at least and mercurial (to download the right version of the code) 0.8.x. I have no idea on how I could reduce this test case.
hrm, ok, I tried to reproduce the bug with less code involved. If you pull changeset 020b7defcc5f instead: hg clone http://yans.inria.fr/code/yans yans-buggy cd yans-buggy hg revert -r 020b7defcc5f and run: make opti-arc VERBOSE=y g++ -fprofile-use -Wall -Werror -g3 -O3 -DNDEBUG=1 -DRUN_SELF_TESTS=1 -DINL_EXPE=inline -I./src/simulator -I./src/common -I./src/test -I./src/host -I./src/ipv4 -I./src/arp -DDISABLE_IPV4_CHECKSUM=1 -fPIC -I./build-dir/opti-arc/include -Wp,-M,-MP,-MM,-MT,./build-dir/opti-arc/src/common/reference-list-test.o,-MF,./build-dir/opti-arc/src/common/reference-list-test.o.P -c -o ./build-dir/opti-arc/src/common/reference-list-test.o src/common/reference-list-test.cc src/common/reference-list-test.cc: In destructor ‘virtual<unnamed>::RefTest::~RefTest()’: src/common/reference-list-test.cc:117: error: coverage mismatch for function ‘_ZN62_GLOBAL__N_src_common_reference_list_test.cc_00000000_168CDC387RefTestD0Ev’ while reading counter ‘arcs’ src/common/reference-list-test.cc:117: error: checksum is 436b0859 instead of 9f668c2a src/common/reference-list-test.cc: In destructor ‘virtual<unnamed>::RefTest::~RefTest()’: src/common/reference-list-test.cc:117: error: coverage mismatch for function ‘_ZN62_GLOBAL__N_src_common_reference_list_test.cc_00000000_168CDC387RefTestD1Ev’ while reading counter ‘arcs’ src/common/reference-list-test.cc:117: error: checksum is 9f0692ee instead of 430b169d src/common/reference-list-test.cc: In member function ‘void yans::ReferenceList<OBJ_PTR>::insert_self_in_other(const yans::ReferenceList<OBJ_PTR>&) [with OBJ_PTR = <unnamed>::A*]’: src/common/reference-list-test.cc:117: error: coverage mismatch for function ‘_ZN4yans13ReferenceListIPN62_GLOBAL__N_src_common_reference_list_test.cc_00000000_168CDC381AEE20insert_self_in_otherERKS4_’ while reading counter ‘arcs’ src/common/reference-list-test.cc:117: error: checksum is 8777197f instead of 45c2bfb1 src/common/reference-list-test.cc: In member function ‘void yans::ReferenceList<OBJ_PTR>::remove_from_list() [with OBJ_PTR = <unnamed>::A*]’: src/common/reference-list-test.cc:117: error: coverage mismatch for function ‘_ZN4yans13ReferenceListIPN62_GLOBAL__N_src_common_reference_list_test.cc_00000000_168CDC381AEE16remove_from_listEv’ while reading counter ‘arcs’ src/common/reference-list-test.cc:117: error: checksum is e2240709 instead of 5f1e525e src/common/reference-list-test.cc: In member function ‘void yans::ReferenceList<OBJ_PTR>::set(OBJ_PTR) [with OBJ_PTR = <unnamed>::A*]’: src/common/reference-list-test.cc:117: error: coverage mismatch for function ‘_ZN4yans13ReferenceListIPN62_GLOBAL__N_src_common_reference_list_test.cc_00000000_168CDC381AEE3setES3_’ while reading counter ‘arcs’ src/common/reference-list-test.cc:117: error: checksum is 85fec9cf instead of 59f34dbc src/common/reference-list-test.cc: In member function ‘yans::ReferenceList<OBJ_PTR>& yans::ReferenceList<OBJ_PTR>::operator=(const yans::ReferenceList<OBJ_PTR>&) [with OBJ_PTR = <unnamed>::A*]’: src/common/reference-list-test.cc:117: error: coverage mismatch for function ‘_ZN4yans13ReferenceListIPN62_GLOBAL__N_src_common_reference_list_test.cc_00000000_168CDC381AEEaSERKS4_’ while reading counter ‘arcs’ src/common/reference-list-test.cc:117: error: checksum is 27f4641 instead of de72c232 src/common/reference-list-test.cc: In copy constructor ‘yans::ReferenceList<OBJ_PTR>::ReferenceList(yans::ReferenceList<OBJ_PTR>&) [with OBJ_PTR = <unnamed>::A*]’: src/common/reference-list-test.cc:117: error: coverage mismatch for function ‘_ZN4yans13ReferenceListIPN62_GLOBAL__N_src_common_reference_list_test.cc_00000000_168CDC381AEEC1ERS4_’ while reading counter ‘arcs’ src/common/reference-list-test.cc:117: error: checksum is 5af78fcc instead of b4d2a5ce src/common/reference-list-test.cc: In constructor ‘yans::ReferenceList<OBJ_PTR>::ReferenceList(const OBJ_PTR&) [with OBJ_PTR = <unnamed>::A*]’: src/common/reference-list-test.cc:117: error: coverage mismatch for function ‘_ZN4yans13ReferenceListIPN62_GLOBAL__N_src_common_reference_list_test.cc_00000000_168CDC381AEEC1ERKS3_’ while reading counter ‘arcs’ src/common/reference-list-test.cc:117: error: checksum is 29ef944 instead of de937d37 src/common/reference-list-test.cc: In destructor ‘yans::ReferenceList<OBJ_PTR>::~ReferenceList() [with OBJ_PTR = <unnamed>::A*]’: src/common/reference-list-test.cc:117: error: coverage mismatch for function ‘_ZN4yans13ReferenceListIPN62_GLOBAL__N_src_common_reference_list_test.cc_00000000_168CDC381AEED1Ev’ while reading counter ‘arcs’ src/common/reference-list-test.cc:117: error: checksum is 6b1e2081 instead of b07ef094 src/common/reference-list-test.cc: In constructor ‘yans::ReferenceList<OBJ_PTR>::ReferenceList() [with OBJ_PTR = <unnamed>::A*]’: src/common/reference-list-test.cc:117: error: coverage mismatch for function ‘_ZN4yans13ReferenceListIPN62_GLOBAL__N_src_common_reference_list_test.cc_00000000_168CDC381AEEC1Ev’ while reading counter ‘arcs’ src/common/reference-list-test.cc:117: error: checksum is 466838e6 instead of 9d08e8f3 src/common/reference-list-test.cc: In member function ‘OBJ_PTR yans::ReferenceList<OBJ_PTR>::operator->() [with OBJ_PTR = <unnamed>::A*]’: src/common/reference-list-test.cc:117: error: coverage mismatch for function ‘_ZN4yans13ReferenceListIPN62_GLOBAL__N_src_common_reference_list_test.cc_00000000_168CDC381AEEptEv’ while reading counter ‘arcs’ src/common/reference-list-test.cc:117: error: checksum is 90db3ff2 instead of 4bbbefe7 src/common/reference-list-test.cc: In member function ‘virtual bool<unnamed>::RefTest::run_tests()’: src/common/reference-list-test.cc:117: error: coverage mismatch for function ‘_ZN62_GLOBAL__N_src_common_reference_list_test.cc_00000000_168CDC387RefTest9run_testsEv’ while reading counter ‘arcs’ src/common/reference-list-test.cc:117: error: checksum is 8bafb28e instead of ceae52c8 src/common/reference-list-test.cc: In member function ‘void<unnamed>::RefTest::test(yans::ReferenceList<<unnamed>::A*>)’: src/common/reference-list-test.cc:117: error: coverage mismatch for function ‘_ZN62_GLOBAL__N_src_common_reference_list_test.cc_00000000_168CDC387RefTest4testEN4yans13ReferenceListIPNS_1AEEE’ while reading counter ‘arcs’ src/common/reference-list-test.cc:117: error: checksum is 38e2bbc4 instead of 76d07c9f src/common/reference-list-test.cc: In constructor ‘<unnamed>::RefTest::RefTest()’: src/common/reference-list-test.cc:117: error: coverage mismatch for function ‘_ZN62_GLOBAL__N_src_common_reference_list_test.cc_00000000_168CDC387RefTestC1Ev’ while reading counter ‘arcs’ src/common/reference-list-test.cc:117: error: checksum is 53613c41 instead of 8f6cb832 src/common/reference-list-test.cc: In constructor ‘<unnamed>::RefTest::RefTest()’: src/common/reference-list-test.cc:117: error: coverage mismatch for function ‘_ZN62_GLOBAL__N_src_common_reference_list_test.cc_00000000_168CDC387RefTestC2Ev’ while reading counter ‘arcs’ src/common/reference-list-test.cc:117: error: checksum is 33168e2f instead of ef1b0a5c src/common/reference-list-test.cc: In member function ‘void<unnamed>::A::trace()’: src/common/reference-list-test.cc:117: error: coverage mismatch for function ‘_ZN62_GLOBAL__N_src_common_reference_list_test.cc_00000000_168CDC381A5traceEv’ while reading counter ‘arcs’ src/common/reference-list-test.cc:117: error: checksum is b0b5b04b instead of e73d459a src/common/reference-list-test.cc: In destructor ‘<unnamed>::A::~A()’: src/common/reference-list-test.cc:117: error: coverage mismatch for function ‘_ZN62_GLOBAL__N_src_common_reference_list_test.cc_00000000_168CDC381AD1Ev’ while reading counter ‘arcs’ src/common/reference-list-test.cc:117: error: checksum is 71255db6 instead of 5b27854d src/common/reference-list-test.cc: In constructor ‘<unnamed>::A::A()’: src/common/reference-list-test.cc:117: error: coverage mismatch for function ‘_ZN62_GLOBAL__N_src_common_reference_list_test.cc_00000000_168CDC381AC1Ev’ while reading counter ‘arcs’ src/common/reference-list-test.cc:117: error: checksum is c12cc451 instead of eb2e1caa make[1]: *** [build-dir/opti-arc/src/common/reference-list-test.o] Error 1 make[1]: Leaving directory `/home/mathieu/code/yans-head' make: *** [rebuild-opti-arc-profile] Error 2
This is fixed in 4.2.0 I believe. Try using -frandom-seed=0 for both the -fprofile-generate and -fprofile-use compilations as workaround. *** This bug has been marked as a duplicate of 20815 ***
yes, the -frandom-seed thing fixes the build. The speedup I get out of profile-drive optimization of the code for a static link is: no profile: 14.76s +/- 0.07 profile: 14.44s +/- 0.06