[Bug c++/30988] [4.1/4.2/4.3 Regression] Incorrect "no return statement" warning with __attribute__ ((noreturn)) and __FUNCTION__

jakub at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Sat Nov 17 12:34:00 GMT 2007



------- Comment #4 from jakub at gcc dot gnu dot org  2007-11-17 12:33 -------
IMNSHO this is not a regression.
void f (const char *)
#ifdef NORET
__attribute__ ((noreturn))
#endif
;

template <class T> struct A
{
  int g ()
  {
#ifdef TEST1
    f (__FUNCTION__);
#elif defined TEST2
    f ((const char*) __FUNCTION__);
#else
    f ((const char *) 0);
#endif
  }
};

for k in gcc-2.96-rh gcc-3.2 gcc-3.3 gcc-3.4 gcc-4.1 gcc-4.2 gcc-4.3; do for i
in " -DNORET" ""; do \
  for j in -DTEST1 -DTEST3 -DTEST3; do \
    /usr/src/$k/obj/gcc/cc1plus $i $j pr30988.C -O3 -Wall -quiet 2>&1 \
      | sed -n "/warning:/s/^/$k$i $j /p"; done; done; done
gcc-3.2 -DNORET -DTEST1 pr30988.C:18: warning: no return statement in function
returning non-void
gcc-3.2 -DNORET -DTEST3 pr30988.C:18: warning: no return statement in function
returning non-void
gcc-3.2 -DNORET -DTEST3 pr30988.C:18: warning: no return statement in function
returning non-void
gcc-3.2 -DTEST1 pr30988.C:18: warning: no return statement in function
returning non-void
gcc-3.2 -DTEST3 pr30988.C:18: warning: no return statement in function
returning non-void
gcc-3.2 -DTEST3 pr30988.C:18: warning: no return statement in function
returning non-void
gcc-3.4 -DNORET -DTEST1 pr30988.C:18: warning: no return statement in function
returning non-void
gcc-3.4 -DTEST1 pr30988.C:18: warning: no return statement in function
returning non-void
gcc-3.4 -DTEST3 pr30988.C:18: warning: no return statement in function
returning non-void
gcc-3.4 -DTEST3 pr30988.C:18: warning: no return statement in function
returning non-void
gcc-4.1 -DNORET -DTEST1 pr30988.C:18: warning: no return statement in function
returning non-void
gcc-4.1 -DTEST1 pr30988.C:18: warning: no return statement in function
returning non-void
gcc-4.1 -DTEST3 pr30988.C:18: warning: no return statement in function
returning non-void
gcc-4.1 -DTEST3 pr30988.C:18: warning: no return statement in function
returning non-void
gcc-4.2 -DNORET -DTEST1 pr30988.C:18: warning: no return statement in function
returning non-void
gcc-4.2 -DTEST1 pr30988.C:18: warning: no return statement in function
returning non-void
gcc-4.2 -DTEST3 pr30988.C:18: warning: no return statement in function
returning non-void
gcc-4.2 -DTEST3 pr30988.C:18: warning: no return statement in function
returning non-void
gcc-4.3 -DNORET -DTEST1 pr30988.C:18: warning: no return statement in function
returning non-void
gcc-4.3 -DTEST1 pr30988.C:18: warning: no return statement in function
returning non-void
gcc-4.3 -DTEST3 pr30988.C:18: warning: no return statement in function
returning non-void
gcc-4.3 -DTEST3 pr30988.C:18: warning: no return statement in function
returning non-void

So, gcc-2.96-RH and 3.3 wouldn't warn ever in templates, even for cases where
it should warn, e.g. when the argument is not type dependent and neither the
called function has noreturn attribute.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30988



More information about the Gcc-bugs mailing list