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

Reply via email to