In the following example, profile data generated by -O0 binary run can not be used for profile-use at -O2. This is either a bug or design flaw if not supported.
g++ -fprofile-generate devirt.cc ./a.out g++ -fprofile-use -O2 devirt.cc ==> devirt.cc: In function 'int main()': devirt.cc:45: error: coverage mismatch for function 'main' while reading counter 'arcs' devirt.cc:45: note: number of counters is 9 instead of 7 // devirt.cc class A { public: virtual int foo() { return 1; } int i; }; class B : public A { public: virtual int foo() { return 2; } int b; } ; int main() { int i; A* ap = 0; for (i = 0; i < 10000; i++) { if (i%7==0) { ap = new A(); } else ap = new B(); ap->foo(); delete ap; } return 0; } -- Summary: Error with -fprofile-use Product: gcc Version: 4.4.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: xinliangli at gmail dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35544