https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110259

            Bug ID: 110259
           Summary: Wrong warning 'conversion to unsigned int' with enum
                    and comma
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: roland.illig at gmx dot de
  Target Milestone: ---

~~~c
enum e {
        e1,
        e2,
};

int side_effect(void);

enum e demo(_Bool, enum e);

enum e
demo(_Bool cond, enum e c1)
{
        enum e var = cond
                     ?
                     c1
                     :
                     (
                         side_effect(),
                             e2
                     );
        return var;
}
~~~

gcc-12.2.0 gcc -O2 -Wconversion -c indent.c
indent.c: In function ‘demo’:
indent.c:16:22: warning: conversion to ‘unsigned int’ from ‘int’ may change the
sign of the result [-Wsign-conversion]
   16 |                      :
      |                      ^


Same result for -ansi, -std=c99, -std=c2x, as well as for GCC 10.4.0.

Removing the 'side_effect(),' makes the warning disappear.

The comma operator has the type of its right operand, therefore I don't see
where the 'unsigned' might come from.

Reply via email to