tech-pkg archive

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

Re: databases/sqlite on powerpc

On Thu, Jun 23, 2022 at 03:51:31PM +0200, Havard Eidnes wrote:
 > it seems I've come across a compiler bug on NetBSD/powerpc
 > -current;

Nope, it's UB in the source :-(

 > Building the tool "lemon" with debugging reveals inside
 > print_stack_union() around line 3071:
 >     hash = (hash & 0x7fffffff)%arraysize;
 >     while( types[hash] ){

Since hash is an int, that & is only defined if the sign bit is
already clear, so it's a nop, and by the prevailing logic used by
compilers these days, it can be dropped. Then you get a negative
result out of the mod.

Dunno why this doesn't break on every platform, but it's not exactly
uncommon for gcc's behavior to be machine-specific for no good reason.

Anyway, I'd patch it to

 -     hash = (hash & 0x7fffffff)%arraysize;
 +     hash = ((unsigned)hash & 0x7fffffff)%arraysize;

although building the tool without optimization might also be a good
idea as when there's one problem like this there's likely more.

David A. Holland

Home | Main Index | Thread Index | Old Index