[tree-ssa] Statement with no effect warning

Bernardo Innocenti bernie@develer.com
Tue Dec 16 20:06:00 GMT 2003


Jan Hubicka wrote:

> I see now that c-simplify already has code to do the warning.  I just
> got caught by checking code and the fact that
> expr_with_side_effect == expr
> does not construct statement with no side effects.  Do we want some
> scheme of warning for non-void expressions whose results is ignored or
> it is way to the hell?  (definitly calls are such expressions where we
> don't want warning like some lint checkers do)

I've seen such no-op constructs used very often to type-check
macro arguments, such as in include/linux/kernel.h:

 /*
  * min()/max() macros that also do
  * strict type-checking.. See the
  * "unnecessary" pointer comparison.
  */
 #define min(x,y) ({ \
         const typeof(x) _x = (x);       \
         const typeof(y) _y = (y);       \
         (void) (&_x == &_y);            \
         _x < _y ? _x : _y; })


Ok, some people are sensitive enough to cast the expression
to void just in case, but we'll be breaking lots of code like
this by issuing a warning.

Despite the potential breakage of legacy code, I'd favour
such an addition.  Would it make sense to ignore this warning
when -Werror is also specified?

-- 
  // Bernardo Innocenti - Develer S.r.l., R&D dept.
\X/  http://www.develer.com/




More information about the Gcc mailing list