Try using the -fno-elide-constructors
switch in g++
From The Definitive Guide to GCC:
-fno-elide-constructors: This option when compiling C++ options causes GCC not to omit creating temporary objects when initializing objects of the same type, as permitted by the C++ standard. Specifying this option causes GCC to explicitly call the copy constructor in all cases.
Some discussions here: How can I get more accurate results from gcov? and here: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12076