[Bug c/44842] New: gcc should not issue warnings for code that will never be executed

2010-07-06 Thread vincent at vinc17 dot org
GCC issues warnings like division by zero or right shift count = width of
type even though the corresponding code will never be executed (under a
condition that is always false); it shouldn't do this, at least by default. For
instance:

int tst (void)
{
  int x;
  x = 0 ? 1 / 0 : 0;
  return x;
  if (0)
{
  x = 1 / 0;
  x = 1  128;
}
  return x;
}

$ gcc-snapshot -std=c99 -O2 -c tst.c
tst.c: In function 'tst':
tst.c:8:13: warning: division by zero [-Wdiv-by-zero]
tst.c:9:7: warning: right shift count = width of type [enabled by default]

One can see that GCC detects neither the first return x; nor the always-false
condition, and issues spurious warnings for the lines:

  x = 1 / 0;
  x = 1  128;

On the other hand, GCC could successfully detect that the 1 / 0 in

  x = 0 ? 1 / 0 : 0;

would never be executed.

Note: always-false conditions occur in practice for platform-dependent code,
e.g. by doing a test on integer types.


-- 
   Summary: gcc should not issue warnings for code that will never
be executed
   Product: gcc
   Version: unknown
Status: UNCONFIRMED
  Severity: enhancement
  Priority: P3
 Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: vincent at vinc17 dot org


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



Re: [Bug c/44842] New: gcc should not issue warnings for code that will never be executed

2010-07-06 Thread Andrew Pinski

This is a dup of a much older bug which I cannot find right now.

On Jul 6, 2010, at 8:10 AM, vincent at vinc17 dot org gcc-bugzi...@gcc.gnu.org 
 wrote:


GCC issues warnings like division by zero or right shift count =  
width of
type even though the corresponding code will never be executed  
(under a
condition that is always false); it shouldn't do this, at least by  
default. For

instance:

int tst (void)
{
 int x;
 x = 0 ? 1 / 0 : 0;
 return x;
 if (0)
   {
 x = 1 / 0;
 x = 1  128;
   }
 return x;
}

$ gcc-snapshot -std=c99 -O2 -c tst.c
tst.c: In function 'tst':
tst.c:8:13: warning: division by zero [-Wdiv-by-zero]
tst.c:9:7: warning: right shift count = width of type [enabled by  
default]


One can see that GCC detects neither the first return x; nor the  
always-false

condition, and issues spurious warnings for the lines:

 x = 1 / 0;
 x = 1  128;

On the other hand, GCC could successfully detect that the 1 / 0 in

 x = 0 ? 1 / 0 : 0;

would never be executed.

Note: always-false conditions occur in practice for platform- 
dependent code,

e.g. by doing a test on integer types.


--
  Summary: gcc should not issue warnings for code that will  
never

   be executed
  Product: gcc
  Version: unknown
   Status: UNCONFIRMED
 Severity: enhancement
 Priority: P3
Component: c
   AssignedTo: unassigned at gcc dot gnu dot org
   ReportedBy: vincent at vinc17 dot org


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