[Insight-developers] Warning - possible candidate for noreturn
attribute
Mathieu Coursolle
mcoursolle at rogue-research.com
Tue Mar 20 12:59:57 EST 2007
Hi,
I am not sure but, wouldn't it be a problem to use a suffix if some
other compilers need a prefix.
The ; can be remove without any problem and let it to the usage.
So what about:
/** 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
Usage:
itkDebugMacro(void foo());
void foo()
{
// Call to none returning function.
exit(0);
}
Thanks.
Mathieu
>Mathieu,
>
>Your patch is different from Karthik's. You include a ";", his does not.
>
>Another alternative would be to define a suffix.
>
> /** 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 ITK_NO_RETURN \
> __attribute__ ((noreturn))
> # endif
> #else
> # define ITK_NO_RETURN
> #endif
>
>Usage:
>
>void foo () ITK_NO_RETURN;
>
>void foo() ITK_NO_RETURN
>{
>body...
>}
>
>
>Bill
>
>
>On 3/20/07, Mathieu Coursolle <mcoursolle at rogue-research.com> wrote:
>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 Researchwww.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
>>
>>
>>
>>
>
More information about the Insight-developers
mailing list