octave-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Octave-bug-tracker] [bug #62212] Wrong unsigned integer overflow with c


From: Markus Mützel
Subject: [Octave-bug-tracker] [bug #62212] Wrong unsigned integer overflow with clang
Date: Wed, 23 Mar 2022 10:25:50 -0400 (EDT)

URL:
  <https://savannah.gnu.org/bugs/?62212>

                 Summary: Wrong unsigned integer overflow with clang
                 Project: GNU Octave
            Submitted by: mmuetzel
            Submitted on: Wed 23 Mar 2022 03:25:47 PM CET
                Category: None
                Severity: 3 - Normal
                Priority: 5 - Normal
              Item Group: Incorrect Result
                  Status: None
             Assigned to: None
         Originator Name: 
        Originator Email: 
             Open/Closed: Open
                 Release: dev
         Discussion Lock: Any
        Operating System: Any

    _______________________________________________________

Details:

I mainly open this report to get a bug number to tag failing tests with clang
(at least version 13).

This can lead to incorrect range operator results for corner case inputs.
Other places in the code might also be affected.

"Minimal" reproducer:

#include <cmath>
#include <iostream>

int main (void)
{
  double db_large_integer = std::pow (2., 64.);
  std::cout << "db_large_integer: " << db_large_integer << std::endl;
  uint64_t ui64_large_integer = db_large_integer;
  std::cout << "ui64_large_integer: " << ui64_large_integer << std::endl;
  return 0;
}


With Ubuntu 21.10:

$ g++ --version
g++ (Ubuntu 11.2.0-7ubuntu2) 11.2.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ g++ -otest_cast test_cast.cc
$ ./test_cast
db_large_integer: 1.84467e+19
ui64_large_integer: 0
$ clang++ --version
Ubuntu clang version 13.0.0-2
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
$ clang++ -otest_cast test_cast.cc
$ ./test_cast
db_large_integer: 1.84467e+19
ui64_large_integer: 9223372036854775808


IIUC, the overflow behavior of unsigned integers is defined in the standard.
Afaict, gcc gets the correct answer, clang doesn’t.




    _______________________________________________________

Reply to this item at:

  <https://savannah.gnu.org/bugs/?62212>

_______________________________________________
  Message sent via Savannah
  https://savannah.gnu.org/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]