[Note, after writing this up I logged it as a bug.
https://issues.itk.org/jira/browse/ITK-3021]

One of our developers has encountered a compiler warning using ITK that
seems to me to be

A) a real problem and
B) fixable

In file included from
/ipldev/scratch/eunyokim/src/BRAINS2013Apr/releaseBuild/ITKv4-install/inclu
de/ITK-4.4/itkImportImageContainer.h:182:
.../ITKv4-install/include/ITK-4.4/itkImportImageContainer.hxx:73:15:
warning: destination for this 'memcpy' call is a pointer to dynamic class
'itk::HammerTissueAttributeVector';
vtable pointer will be
      overwritten [-Wdynamic-class-memaccess]
      memcpy( temp, m_ImportPointer, m_Size * sizeof( TElement ) );
      ~~~~~~  ^
/ipldev/scratch/eunyokim/src/BRAINS2013Apr/releaseBuild/ITKv4-install/inclu
de/ITK-4.4/itkImage.hxx:57:13: note: in instantiation of member function
'itk::ImportImageContainer<unsigned long,
itk::HammerTissueAttributeVector>::Reserve'
requested here
  m_Buffer->Reserve(num);

Use of memcpy to move a C++ array is a terrible idea.  It might work OK if
A) the object class has no virtual methods B) All class members are plain
ordinary data (e.g. scalars, arrays of scalars)  - OR - C) the object
class' member variables are either POD or class objects satisfying
conditions A&B.

I think the memcpy should be replaced by a 'for' loop that copies array
elements one at a time. This will cause a compiler error if there is no
operator= defined for the Pixel type, but if that is the case, using
memcpy is double plus bad.

This will silence the warnings and preserve C++ object semantics, and the
perfomance penalty is not terrible.  Particularly since the
ImportImageContainer only uses memcpy in the case of growing or shrinking
the container, which I can't imagine happens in the normal course of ITK
usage.

--
Kent Williams [email protected]






On 4/8/13 12:08 PM, "Kim, Eun Young" <[email protected]> wrote:

>Kent,
>
>
>Hans told me to remove the warning, but not sure if that is even
>possible.
>Well, if there seems no simple solution, we could talk to Hans later. :)
>
>
>Code:
>BRAINSTools/BRAINSCut/BRAINSFeatureCreators/HammerAttributeCreator
>
>
>Warning:
>[eunyokim@wundt HammerAttributeCreator (myMaster +)]$ make -C
>../../../../releaseBuild/BRAINSTools-build/BRAINSCut/BRAINSFeatureCreators
>/HammerAttributeCreator/
>Scanning dependencies of target HammerAttributeCreatorLib
>Building CXX object
>BRAINSCut/BRAINSFeatureCreators/HammerAttributeCreator/CMakeFiles/HammerAt
>tributeCreatorLib.dir/HammerAttributeCreator.cxx.o
>In file included from
>/ipldev/scratch/eunyokim/src/BRAINS2013Apr/BRAINSTools/BRAINSCut/BRAINSFea
>tureCreators/HammerAttributeCreator/HammerAttributeCreator.cxx:11:
>In file included from
>/ipldev/scratch/eunyokim/src/BRAINS2013Apr/releaseBuild/ITKv4-install/incl
>ude/ITK-4.4/itkImage.h:22:
>In file included from
>/ipldev/scratch/eunyokim/src/BRAINS2013Apr/releaseBuild/ITKv4-install/incl
>ude/ITK-4.4/itkImportImageContainer.h:182:
>.../ITKv4-install/include/ITK-4.4/itkImportImageContainer.hxx:73:15:
>warning: destination for this 'memcpy' call is a pointer to dynamic class
>'itk::HammerTissueAttributeVector';
> vtable pointer will be
>      overwritten [-Wdynamic-class-memaccess]
>      memcpy( temp, m_ImportPointer, m_Size * sizeof( TElement ) );
>      ~~~~~~  ^
>/ipldev/scratch/eunyokim/src/BRAINS2013Apr/releaseBuild/ITKv4-install/incl
>ude/ITK-4.4/itkImage.hxx:57:13: note: in instantiation of member function
>'itk::ImportImageContainer<unsigned long,
>itk::HammerTissueAttributeVector>::Reserve'
> requested here
>  m_Buffer->Reserve(num);
>            ^
>/ipldev/scratch/eunyokim/src/BRAINS2013Apr/releaseBuild/ITKv4-install/incl
>ude/ITK-4.4/itkImage.h:91:15: note: in instantiation of member function
>'itk::Image<itk::HammerTissueAttributeVector, 3>::Allocate'
> requested here
>  itkNewMacro(Self);
>              ^
>/ipldev/scratch/eunyokim/src/BRAINS2013Apr/releaseBuild/ITKv4-install/incl
>ude/ITK-4.4/itkMacro.h:165:21: note: expanded from macro 'itkNewMacro'
>  itkSimpleNewMacro(x)                                         \
>                    ^
>/ipldev/scratch/eunyokim/src/BRAINS2013Apr/releaseBuild/ITKv4-install/incl
>ude/ITK-4.4/itkMacro.h:175:22: note: expanded from macro
>'itkSimpleNewMacro'
>      smartPtr = new x;                                        \
>                     ^
>/ipldev/scratch/eunyokim/src/BRAINS2013Apr/releaseBuild/ITKv4-install/incl
>ude/ITK-4.4/itkImageSource.hxx:67:24: note: in instantiation of member
>function 'itk::Image<itk::HammerTissueAttributeVector, 3>::New'
> requested here
>  return TOutputImage::New().GetPointer();
>                       ^
>/ipldev/scratch/eunyokim/src/BRAINS2013Apr/BRAINSTools/BRAINSCut/BRAINSFea
>tureCreators/HammerAttributeCreator/HammerAttributeCreator.cxx:113:25:
>note: in instantiation of member function
>      'itk::ImageSource<itk::Image<itk::HammerTissueAttributeVector, 3>
>>::MakeOutput' requested here
>  modelAttributeFilter->SetStrength(Strength);
>                        ^
>/ipldev/scratch/eunyokim/src/BRAINS2013Apr/releaseBuild/ITKv4-install/incl
>ude/ITK-4.4/itkImportImageContainer.hxx:73:15: note: explicitly cast the
>pointer to silence this warning
>      memcpy( temp, m_ImportPointer, m_Size * sizeof( TElement ) );
>              ^
>              (void*)
>1 warning generated.
>Linking CXX shared library
>/ipldev/scratch/eunyokim/src/BRAINS2013Apr/releaseBuild/bin/libHammerAttri
>buteCreatorLib.dylib
>Built target HammerAttributeCreatorLib
>Linking CXX executable
>/ipldev/scratch/eunyokim/src/BRAINS2013Apr/releaseBuild/bin/HammerAttribut
>eCreator
>Built target HammerAttributeCreator
>
>
>
>Just please take a look at the code when you have time.
>
>
>Thank you!
>
>
>Regina



________________________________
Notice: This UI Health Care e-mail (including attachments) is covered by the 
Electronic Communications Privacy Act, 18 U.S.C. 2510-2521, is confidential and 
may be legally privileged.  If you are not the intended recipient, you are 
hereby notified that any retention, dissemination, distribution, or copying of 
this communication is strictly prohibited.  Please reply to the sender that you 
have received the message in error, then delete it.  Thank you.
________________________________
_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
http://www.itk.org/mailman/listinfo/insight-developers

Reply via email to