2012-11-29 1 views
1

gcov se plaint d'un de mes algorithmes:rapports Gcov que le retour déclaration est pas frappé

File 'Algorithm.h' 
Lines executed:95.00% of 20 
Algorithm.h:creating 'Algorithm.h.gcov' 

    17: 25:inline std::vector<std::string> starts_with(const std::vector<std::string>& input, const std::string& startsWith) 
    -: 26:{ 
    17: 27: std::vector<std::string> output; 
    17: 28: std::remove_copy_if(input.begin(), input.end(), std::back_inserter(output), !boost::bind(&boost::starts_with<std::string,std::string>, _1, startsWith)); 
#####: 29: return output; 
    -: 30:} 

Mon test ressemble à ceci, et il passe:

TEST (TestAlgorithm, starts_with) 
{ 
    std::vector<std::string> input = boost::assign::list_of("1")("2")("22")("33")("222"); 
    EXPECT_TRUE(starts_with(input,"22") == boost::assign::list_of("22")("222")); 
} 

Que pourrait être le problème? Je n'utilise pas l'optimisation.

MISE À JOUR:

Mon CMakeList.txt contient:

if(CMAKE_COMPILER_IS_GNUCXX) 
    set(CMAKE_CXX_FLAGS "-O0")  ## Optimize 
endif() 

Répondre

2

Essayez d'utiliser l'interrupteur -fno-elide-constructors en g ++

From The Definitive Guide to GCC:

- fno-elide-constructors: Cette option lors de la compilation C++ opt ions force GCC à ne pas omettre de créer des objets temporaires lors de l'initialisation des objets du même type, comme le permet la norme C++. Si vous spécifiez cette option , GCC appelle explicitement le constructeur de copie dans tous les cas .

Quelques discussions ici: How can I get more accurate results from gcov? et ici: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12076

Questions connexes