J'ai un programme que je compile à la fois pour x86 et arm (rpi2). J'utilise boost pour l'implémentation de crc et ai un problème avec ça échouant sur la plate-forme de bras. Après le débogage, j'ai trouvé que les calculs de crc étaient désactivés sur le bras. J'ai écrit ces petits cas de test pour identifier le problème:boost crc optimisé échoue sur le bras
namespace
{
unsigned char const data[] = { 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39 };
std::size_t const data_len = sizeof(data)/sizeof(data[0]);
uint16_t const expected = 0x29B1;
}
BOOST_AUTO_TEST_CASE(test_non_optimized){
boost::crc_basic<16> crc_basic(0x1021, 0xFFFF, 0, false, false);
crc_basic.process_bytes(data, data_len);
BOOST_CHECK_EQUAL(crc_basic.checksum(), expected);
}
BOOST_AUTO_TEST_CASE(test_optimized) {
boost::crc_optimal<16, 0x1021, 0xFFFF, 0, false, false> crc_optimal;
crc_optimal.process_bytes(data, data_len);
BOOST_CHECK_EQUAL(crc_optimal.checksum(), expected);
}
BOOST_AUTO_TEST_CASE(test_function) {
uint16_t checksum = boost::crc<16, 0x1021, 0xFFFF, 0, false, false>(data, data_len);
BOOST_CHECK_EQUAL(checksum, expected);
}
Les trois cas de test passent sur x86. Mais sur le bras seulement le test de test crc_basic. Les deux autres échoue:
test/boost_crc_test.cpp(41): check crc_optimal.checksum() == expected has failed [29299 != 10673]
test/boost_crc_test.cpp(46): check checksum == expected has failed [29299 != 10673]
version Boost 1.63.0
compilateur: gcc (GCC) 6.3.1 20170109
Je suis assez surpris de tomber sur quelque chose comme ça avec boost. Des idées sur ce qui cause cela?
"Résolu le problème" ou "supprimé le symptôme"? Il pourrait encore être un comportement indéfini. – sehe
Dans le cas où quelqu'un veut facilement exécuter ceci avec désinfectant activé: http://coliru.stacked-crooked.com/a/d13bb5ff9fb1f7ad – sehe
ok, bonne entrée. Tout ce que je sais, c'est que maintenant le programme semble fonctionner et que les 40 cas de tests qui ont échoué auparavant dans divers endroits passent maintenant tous. Cela dit. Je ne sais pas vraiment comment interpréter la sortie du flag sanitize. Êtes-vous en train de me dire qu'il est dangereux de continuer à utiliser O3 et la fonction boost crc? – tkarls