Print this page
11506 smatch resync

*** 65,75 **** sval_t sval_type_val(struct symbol *type, long long val) { sval_t ret; if (!type) ! type = &int_ctype; ret.type = type; ret.value = val; return ret; } --- 65,75 ---- sval_t sval_type_val(struct symbol *type, long long val) { sval_t ret; if (!type) ! type = &llong_ctype; ret.type = type; ret.value = val; return ret; }
*** 92,101 **** --- 92,103 ---- return (sval.type->type == SYM_PTR || sval.type->type == SYM_ARRAY); } int sval_unsigned(sval_t sval) { + if (is_ptr_type(sval.type)) + return true; return type_unsigned(sval.type); } int sval_signed(sval_t sval) {
*** 456,465 **** --- 458,469 ---- } else { ret.value = (left.value - right.value) / align; } } + if (op == '-') + ret.type = ssize_t_ctype; return ret; } sval_t sval_binop(sval_t left, int op, sval_t right) {
*** 581,599 **** left = sval_cast(type, left); right = sval_cast(type, right); return sval_binop_overflows(left, op, right); } ! unsigned long long fls_mask(unsigned long long uvalue) { ! unsigned long long high_bit = 0; while (uvalue) { uvalue >>= 1; high_bit++; } if (high_bit == 0) return 0; return ((unsigned long long)-1) >> (64 - high_bit); } --- 585,622 ---- left = sval_cast(type, left); right = sval_cast(type, right); return sval_binop_overflows(left, op, right); } ! int find_first_zero_bit(unsigned long long uvalue) { ! int i; + for (i = 0; i < 64; i++) { + if (!(uvalue & (1ULL << i))) + return i; + } + return i; + } + + int sm_fls64(unsigned long long uvalue) + { + int high_bit = 0; + while (uvalue) { uvalue >>= 1; high_bit++; } + return high_bit; + } + + unsigned long long fls_mask(unsigned long long uvalue) + { + int high_bit = 0; + + high_bit = sm_fls64(uvalue); if (high_bit == 0) return 0; return ((unsigned long long)-1) >> (64 - high_bit); }
*** 605,614 **** --- 628,639 ---- const char *sval_to_str(sval_t sval) { char buf[30]; + if (sval_is_ptr(sval) && sval.value == valid_ptr_max) + return "ptr_max"; if (sval_unsigned(sval) && sval.value == ULLONG_MAX) return "u64max"; if (sval_unsigned(sval) && sval.value == UINT_MAX) return "u32max"; if (sval.value == USHRT_MAX)
*** 636,645 **** --- 661,686 ---- snprintf(buf, sizeof(buf), "%lld", sval.value); return alloc_sname(buf); } + const char *sval_to_str_or_err_ptr(sval_t sval) + { + char buf[12]; + + if (option_project != PROJ_KERNEL || + !is_ptr_type(sval.type)) + return sval_to_str(sval); + + if (sval.uvalue >= -4905ULL) { + snprintf(buf, sizeof(buf), "(%lld)", sval.value); + return alloc_sname(buf); + } + + return sval_to_str(sval); + } + const char *sval_to_numstr(sval_t sval) { char buf[30]; if (sval_unsigned(sval))