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

            Bug ID: 104616
           Summary: -Wconversion diagnostic on operator `/` with short
                    ints, only when -fsanitize=undefined is passed
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: oschonrock at gmail dot com
  Target Milestone: ---

`-fsanitize=undefined` should not affect -Wconversion behaviour. The behaviour
without -fsanitize=undefined is correct I believe.


https://godbolt.org/z/5663eajW1

int main() {
    short sum   = 50;
    short count = 10;

    short avg1 = sum / count;

    auto tmp = sum;
    tmp /= count;
    short avg2 = tmp;

    return (avg1 + avg2) & 0xff; // prevent "unused" diagnostics
}

g++ -Wconversion
=> no diagnostics

g++ -fsanitize=undefined -Wconversion

<source>: In function 'int main()':
<source>:5:22: warning: conversion from 'int' to 'short int' may change value
[-Wconversion]
    5 |     short avg1 = sum / count;
      |                  ~~~~^~~~~~~
<source>:8:12: warning: conversion from 'int' to 'short int' may change value
[-Wconversion]
    8 |     tmp /= count;
      |            ^~~~~

Reply via email to