Bug avec boost::spirit::qi et flag -O2 - C++ - Programmation
Marsh Posté le 11-03-2014 à 16:27:33
Je up vite fait, j'ai trouvé la source du problème.
Ca vient de classic::position_iterator2 apparemment :
Code :
|
Si j'utilise pos_first / pos_last dans boost::qi::phrase_parse, ça marche sans optimisation, mais -O2 ruine tout (testé sur un exemple tout simple de parsing de nombres "1, 2, 3, etc" ).
Si j'utilise fwd_first / fwd_last, là les deux sont bons.
J'utilise Boost 1.54, je vais tenter de recompiler cet exemple avec -O2 sur la version 1.55 et je mettrai à jour ce post.
edit : Recompilé avec Boost 1.55, aucun soucis en debug/release
Marsh Posté le 11-03-2014 à 14:49:51
Hi there
J'ai écris un parseur de fichier texte en utilisant boost::spirit::qi qui marche très bien.
Je viens d'essayer de compiler en release (avec le flag -O2) et là, il est incapable de me parser mon fichier
Voilà la class qui gère les règles :
(mp::Property est une structure, mp::Type est un enum, MaterialInfo est la structure renvoyée )
Pour ce qui est de l'invocation, ça se passe comme ça :
Toutes les structures parsées par les règles sont adaptés à boost::spirit::qi avec BOOST_FUSION_ADAPT_STRUCT (certaine le sont partiellement ceci-dit, j'ai des attributs de ces structures qui ne sont pas utilisés par le parseur, ça peut être gênant ? )
Mon fichier d'entrée :
Et le parser se stop dès le première caractère, il m'affiche ça :
Line # 1 at position 1
properties {
^ here
Je sais pas tellement ce qui se passe, on dirait que le compilateur optimise les opérateurs utilisés pour générer les règles, mais j'ai pas trouvé grand chose sur internet
Merci à vous
edit : J'ai oublié de préciser, les namespace boost sont ré-associés pour raccourcir un peu (dans le cpp) :
Message édité par Terminapor le 11-03-2014 à 14:51:29
---------------
Perhaps you don't deserve to breathe