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++;