On 2021-12-02 09:00, Jakub Jelinek wrote:
On Thu, Dec 02, 2021 at 08:53:31AM -0500, Vladimir Makarov via Gcc-patches 
wrote:
The following patch fixes

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

The patch was successfully bootstrapped and tested on x86-64. There is no
test as the bug occurs on GCC built with sanitizing for an existing go test.
I'm afraid we can't use __builtin_smul_overflow, not all system compilers
will have that.
But, as it is done in int and we kind of rely on int being 32-bit on host
and rely on long long being 64-bit, I think you can do something like:
       long long priorityll = (long long) mult * diff;
       priority = priorityll;
       if (priorityll != priority
...


My 1st version of the patch was based on long long but the standard does not guarantee that int size is smaller than long long size.  Although it is true for all targets supported by GCC.

Another solution would be to switching to int32_t instead of int for costs but it will require a lot of changes in RA code.

I see your point for usage system compiler different from GCC and LLVM.  I guess I could change it to

#if __GNUC__ >= 5

current code

#else

long long code

#endif


What do you think?


Reply via email to