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

            Bug ID: 81097
           Summary: UBSAN: false positive for not existing negation
                    operator and a bogus message
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: sanitizer
          Assignee: unassigned at gcc dot gnu.org
          Reporter: babokin at gmail dot com
                CC: dodji at gcc dot gnu.org, dvyukov at gcc dot gnu.org,
                    jakub at gcc dot gnu.org, kcc at gcc dot gnu.org, marxin at 
gcc dot gnu.org
  Target Milestone: ---

gcc rev249202.

Test case doesn't contain negations, but ubsan claims that negation has a
problem.

Error message also contains reference to '<unknown>' type. Though problems seem
to be related.

> cat f.cpp
unsigned int a = 3309568;
unsigned int b = -1204857327;
short c = -10871;
short x;
int main() {
  x = (short(~a) | ~c) +  (short(~b) | ~c);
  return 0;
}

> g++ -fsanitize=undefined -O0 f.cpp -o out
> ./out
f.cpp:6:18: runtime error: negation of -32768 cannot be represented in type
'<unknown>'; cast to an unsigned type to negate this value to itself

Reply via email to