[Insight-developers] Warning - possible candidate for noreturn attribute

Mathieu Coursolle mcoursolle at rogue-research.com
Tue Mar 20 10:53:46 EST 2007


Hi,

Thanks for the hint.

So any objection of doing the same kind of macro for ITK?

Here is a patch to do so.

Thanks.

Mathieu

>Here's the macro boost defines for noreturn functions:
>
>https://boost-consulting.com:8443/trac/soc/browser/boost/soc/2006/
>coroutine/trunk/boost/coroutine/detail/noreturn.hpp?rev=1087 
>
>#if defined(__GNUC__)
>#define BOOST_COROUTINE_NORETURN(function) \
>    function __attribute__((__noreturn__)) \
>#elif defined (BOOST_MSVC)
>#define BOOST_COROUTINE_NORETURN(function) \
>    __declspec(noreturn) function          \ 
>#else
>//just for testing, remove the following error.
>#error no default
>#define BOOST_COROUTINE_NORETURN(function) \
>    function
>#endif
>
>used as BOOST_COROUTINE_NORETURN( void foo() )
>{
>  //body of foo 
>}
>
>BTW __attribute__((noreturn)) seems to be supported on gnuc compilers
>since 2.4 ..
>
>--
>karthik
>
>On 3/19/07, Bill Lorensen < bill.lorensen at gmail.com> wrote:
>Mathieu,
> 
>Is there a compiler flag to suppress that warning?
> 
>Bill
>
> 
>On 3/19/07, Mathieu Coursolle <mcoursolle at rogue-research.com > wrote:
>Hi,
>
>I currently use ITK in a XCode project on Mac OSX.
>When I include some ITK headers, I get the following 
>warning:
>
>/Common/itkImageSource.txx: In member function 'void
>itk::ImageSource<TOutputImage>::ThreadedGenerateData(const typename
>TOutputImage::RegionType&, int) [with TOutputImage = ITK2DImage]': 
>/Common/itkImageSource.txx:244: warning: function might be possible
>candidate for attribute 'noreturn'
>
>This is cause by the fact that the implementation of ThreadedGenerateData
>from itkImageSource (base class) just throws an exception, so it does 
>not return.
>
>//----------------------------------
------------------------------------------
>// The execute method created by the subclass.
>template <class TOutputImage>
>void
>ImageSource<TOutputImage> 
>::ThreadedGenerateData(const OutputImageRegionType&,
>                      int)
>{
>itkExceptionMacro("subclass should override this method!!!");
>}
>
>I can remove that warning by changing the function prototype to use the 
>noreturn
>attribute:
>
>virtual
>void ThreadedGenerateData(const OutputImageRegionType&
>outputRegionForThread,
>                           int threadId )
>__attribute__ ((noreturn));
>
>However, I believe that the noreturn attribute is not defined on all 
>compilers.
>
>Any suggestion to get rid of that warning?
>
>Thank you.
>
>Mathieu
>
>--
>____________________________________________________________
>Mathieu Coursolle                   mcoursolle at rogue-research.com
>Rogue Research                      www.rogue-research.com
>Montréal, Québec, Canada 
>
>_______________________________________________ 
>Insight-developers mailing list
>Insight-developers at itk.org
>http://www.itk.org/mailman/listinfo/insight-developers 
>
>
>_______________________________________________
>Insight-developers mailing list
>Insight-developers at itk.org 
>http://www.itk.org/mailman/listinfo/insight-developers
>
>
>
>
-------------- next part --------------
? Code/.DS_Store
Index: Code/Common/itkImageSource.h
===================================================================
RCS file: /cvsroot/Insight/Insight/Code/Common/itkImageSource.h,v
retrieving revision 1.53
diff -r1.53 itkImageSource.h
219,222c219,221
<   virtual
<   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
<                             int threadId );
< 
---
>   itkNoReturnMacro(virtual void
>                    ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
>                                         int threadId ));
Index: Code/Common/itkMacro.h
===================================================================
RCS file: /cvsroot/Insight/Insight/Code/Common/itkMacro.h,v
retrieving revision 1.70
diff -r1.70 itkMacro.h
112a113,126
> /** On some compiler, functions that do not return (ex: exit(0)) must
>   * have the noreturn attribute. Otherwise, a warning is raised. Use
>   * that macro to avoid those warnings. GCC defines the attribute
>   * noreturn for versions 2.5 and higher.*/
> #if defined(__GNUC__)
> #  if (((__GNUC__ == 2) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ >= 3))
> #    define itkNoReturnMacro(function) \
>        function __attribute__ ((noreturn));
> #  endif
> #else
> #  define itkNoReturnMacro(function) \
>     function;
> #endif
> 


More information about the Insight-developers mailing list