← Commit list

7cbcd1cbf

Denis Vlasenko
Denis Vlasenko
2008-08-28
FAILED Duration: 22s

Subject

awk: bitwise ops cast oprands and results to unsigned long, not signed. closes 4774.

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

editors/awk.c+8 -6
@@ -2039,28 +2039,30 @@ static var *exec_builtin(node *op, var *res)
setvar_p(res, s);
break;
+ /* Bitwise ops must assume that operands are unsigned. GNU Awk 3.1.5:
+ * awk '{ print or(-1,1) }' gives "4.29497e+09", not "-2.xxxe+09" */
case B_an:
- setvar_i(res, (long)getvar_i(av[0]) & (long)getvar_i(av[1]));
+ setvar_i(res, (unsigned long)getvar_i(av[0]) & (unsigned long)getvar_i(av[1]));
break;
case B_co:
- setvar_i(res, ~(long)getvar_i(av[0]));
+ setvar_i(res, ~(unsigned long)getvar_i(av[0]));
break;
case B_ls:
- setvar_i(res, (long)getvar_i(av[0]) << (long)getvar_i(av[1]));
+ setvar_i(res, (unsigned long)getvar_i(av[0]) << (unsigned long)getvar_i(av[1]));
break;
case B_or:
- setvar_i(res, (long)getvar_i(av[0]) | (long)getvar_i(av[1]));
+ setvar_i(res, (unsigned long)getvar_i(av[0]) | (unsigned long)getvar_i(av[1]));
break;
case B_rs:
- setvar_i(res, (long)((unsigned long)getvar_i(av[0]) >> (unsigned long)getvar_i(av[1])));
+ setvar_i(res, (unsigned long)getvar_i(av[0]) >> (unsigned long)getvar_i(av[1]));
break;
case B_xo:
- setvar_i(res, (long)getvar_i(av[0]) ^ (long)getvar_i(av[1]));
+ setvar_i(res, (unsigned long)getvar_i(av[0]) ^ (unsigned long)getvar_i(av[1]));
break;
case B_lo: