[Dcmlib] [Fwd: patch]

Mathieu Malaterre mathieu.malaterre at kitware.com
Mon Jun 21 16:20:09 CEST 2004


Salut,

	J'en reviens pas du choix de g++. Je vais essayer de reproduire ca sur 
un mini example. Et si ca confirme j'envoi ca a gcc-bugzilla, c'est qd 
meme incoryable qu'il fasse un implicit cast en bool !

Mathieu

Eric Boix wrote:
> 	Salut Mathieu,
> 
> Quoting Mathieu Malaterre <mathieu.malaterre at kitware.com>:
> 
>>  je suppose que vous avez vu passer les logs, donc voila je vous faire
>>du décès prematuré de gdcmHeaderHelper.
> 
> Well done ! RIP gdcmHeaderHelper.
> 
> 
>>Tout ca pour dire que mon dernier bout de patch ne marche pas
>>(cf gdcm2.patch). Je peux pas 'string constifier' gdcmDicomDir.
>>Est-ce que le constructeur est cense modiifer cette chaine de caractere ?
>>En tout cas j'aimerais bien qu'on m'explique ce qui ne va pas
> 
> Je presume que ce qui te fait dire que cela ne va pas, c'est que ctest
> rapporte que PrintDicomDir (entre autres) echoue. Supposons que c'est cela.
> 
> cd gdcmbin (la ou tu a compile' gdcm)
> nm --demangle --print-file-name Test/*.o | grep gdcmDicomDir::gdcmDicomDir
>   Test/PrintDicomDir.o:         U gdcmDicomDir::gdcmDicomDir(bool)
>   ...
> Moralite', c'est le "mauvais" constructeur qui est appele' i.e.
> gdcmDicomDir(bool) au lieu de gdcmDicomDir(std::string&, bool, bool).
> A l'invocation dans Test/PrintDicomDir.cxx, on a:
>    std::string file;
>    e1 = new gdcmDicomDir(file.c_str());
> Si tu remplaces la deuxieme ligne par
>    e1 = new gdcmDicomDir(file);
> alors c'est le "bon" constructeur qui est appele', et Test/PrintDicomDir
> fonctionne a nouveau.
> Moralite', il y a conversion implicite de
> gdcmDicomDir(char*) en gdcmDicomDir(bool) au lieu de ce que l'on
> pourrait attendre i.e. gdcmDicomDir(std::string&, bool, bool).
> J'ai essaye' de declarer gdcmDicomDir(bool) en explicit dans
> src/gdcmDicomDir.h mais, etonnament, cela ne regle pas le pb.
> In fine, il faut changer tout les appels au constructeur gdcmDicomDir(char*)
> en des gdcmDicomDir(std::string&, bool, bool), et la liste t'es donne'e par
> la commande nm ci-dessus, en l'occurence
>   Test/BuildUpDicomDir.cxx
>   Test/makeDicomDir.cxx
>   Test/PrintDicomDir.cxx
>   Test/TestDicomDir.cxx
> et ton patch devrait fonctionner. Je n'ai pas integre' ton patch, mais
> dis moi si souhaites que je le fasse ou si tu t'en charge.
> 
> Remarque amusante: en cherchant la cause de tes deboires, j'ai decouvert
> le flag -felide-constructor de g++ qui evite une double copie du string
> dans le cas semblables au cas suivant:
> string foo()
> {
>    string bozo;
>    ...do some shit with bozo...
>    return bozo;
> }
> 
> main(){
>   string a = foo();    /// <== double copy
> }
> Je regarde si cela ameliore mes pb de fuite memoire, bien que la solution
> ne soit pas portable...
> 
> 
>>(surtout qu'il est tard et que j'arrive pas a reflechir).
> 
> Cafeine is your friend ;-] Amphetamine is your enemy.
> 
> 
>>Ps: Good job, mes test ITK marchent au poil merci a tout le monde.
> 
> Hummm, il faut vraiment que l'on fasse une vrai test suite inte'gre'e
> a ctest. Apres ton commit, ctest passait droit devant, mais pourtant
> ./bin/gdcmTest Test/WriteSimple $(GDCM_DATA)/dicom-sc_cs-1.dcm foo.dcm
> se plantait lamentablement (pour les memes raisons qui font que ton
> patch gdcm2.patch ne fonctionne pas). Or ctest ne voit pas de pb...
>    Il m'ai deja arrive' deux fois de faire des commit recents en me
> basant sur ctest, avant de decouvrir des conneries. Hummm, nicht good.
>    Je regarde cela d'un peu plus pres, a commencer par la conversion
> de la test suite python...
> 
> 	Merci a toi.
> 	Eric.
> 






More information about the Dcmlib mailing list