Subject: Re: [Boost-bugs] [Boost C++ Libraries] #8665: Unreachable code warnings in variant.hpp - msvc
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2013-09-06 15:03:18
#8665: Unreachable code warnings in variant.hpp - msvc
-------------------------------+---------------------
Reporter: hvemha@⦠| Owner: ebf
Type: Bugs | Status: new
Milestone: To Be Determined | Component: variant
Version: Boost 1.53.0 | Severity: Problem
Resolution: | Keywords:
-------------------------------+---------------------
Comment (by hvemha@â¦):
The warning on line 1017 is supressed by defining NDEBUG (adding /D NDEBUG
to the command line). Iâm not too concerned about this as NDEBUG should be
defined when creating optimized builds.
I used the same version (now on update 3). The warning is also produced by
earlier versions of the VC.
This simple code will produce the warning:
{{{
__declspec(noreturn)
void no_return() {}
int call_no_return() { no_return(); }
int main(int argc, char**)
{
if( argc > 0 )
{
return call_no_return(); // warning C4702
}
return 7;
}
}}}
I guess the warning is related to assigning the return value of
{{{call_no_return}}} to a variable in main scope (in an intermediate
compiler language?), and not the function call.
Looking at the machine code it looks like the optimizer will assume the
function never returns when declared with {{{__declspec(noreturn)}}}. The
optimizer change the above code to {{{"return 7;"}}}, but if a side effect
is introduces into {{{no_return}}}, the behaviour is undefined (typically
a crash when returning from {{{no_return}}} as the compiler has not
included the required instructions). In non-optimized builds the compiler
ignores the {{{noreturn}}} declaration and generates instructions as if
the function will/can return.
In my opinion the compiler is correct to issue the warning (the programmer
has told the compiler that the function will not return).
Note: the fact that the compiler changes my example code to {{{"return
7;"}}} is also OK as for {{{argc > 0}}} the behaviour is undefined...
-- Ticket URL: <https://svn.boost.org/trac/boost/ticket/8665#comment:4> Boost C++ Libraries <http://www.boost.org/> Boost provides free peer-reviewed portable C++ source libraries.
This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:14 UTC