Print this page
12166 resync smatch to 0.6.1-rc1-il-3
*** 132,141 ****
--- 132,144 ----
static int truncates_nicely(struct symbol *type, sval_t min, sval_t max)
{
unsigned long long mask;
int bits = type_bits(type);
+ if (type_is_fp(min.type) && !type_is_fp(type))
+ return 0;
+
if (bits >= type_bits(min.type))
return 0;
mask = -1ULL << bits;
return (min.uvalue & mask) == (max.uvalue & mask);
*** 430,439 ****
--- 433,449 ----
static sval_t parse_val(int use_max, struct expression *call, struct symbol *type, const char *c, const char **endp)
{
const char *start = c;
sval_t ret;
+ if (type == &float_ctype)
+ return sval_type_fval(type, strtof(start, (char **)endp));
+ else if (type == &double_ctype)
+ return sval_type_fval(type, strtod(start, (char **)endp));
+ else if (type == &ldouble_ctype)
+ return sval_type_fval(type, strtold(start, (char **)endp));
+
if (!strncmp(start, "max", 3)) {
ret = sval_type_max(type);
c += 3;
} else if (!strncmp(start, "u64max", 6)) {
ret = sval_type_val(type, ULLONG_MAX);
*** 562,572 ****
c++;
if (*c == '[' || *c == '\0')
break;
}
if (*c != '-') {
! sm_msg("debug XXX: trouble parsing %s c = %s", str, c);
break;
}
c++;
if (*c == '(')
c++;
--- 572,582 ----
c++;
if (*c == '[' || *c == '\0')
break;
}
if (*c != '-') {
! sm_debug("XXX: trouble parsing %s c = %s", str, c);
break;
}
c++;
if (*c == '(')
c++;