Print this page
12166 resync smatch to 0.6.1-rc1-il-3
@@ -132,10 +132,13 @@
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,10 +433,17 @@
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,11 +572,11 @@
c++;
if (*c == '[' || *c == '\0')
break;
}
if (*c != '-') {
- sm_msg("debug XXX: trouble parsing %s c = %s", str, c);
+ sm_debug("XXX: trouble parsing %s c = %s", str, c);
break;
}
c++;
if (*c == '(')
c++;