Print this page
11972 resync smatch

@@ -51,10 +51,13 @@
         estate_set_fuzzy_max(tmp, sval_max(estate_get_fuzzy_max(s1), estate_get_fuzzy_max(s2)));
 
         if (estate_capped(s1) && estate_capped(s2))
                 estate_set_capped(tmp);
 
+        if (estate_treat_untagged(s1) && estate_treat_untagged(s2))
+                estate_set_treat_untagged(tmp);
+
         return tmp;
 }
 
 struct data_info *get_dinfo(struct smatch_state *state)
 {

@@ -114,11 +117,11 @@
         get_dinfo(state)->fuzzy_max = empty;
 }
 
 int estate_has_hard_max(struct smatch_state *state)
 {
-        if (!state)
+        if (!state || !estate_rl(state))
                 return 0;
         return get_dinfo(state)->hard_max;
 }
 
 void estate_set_hard_max(struct smatch_state *state)

@@ -152,10 +155,27 @@
 void estate_set_capped(struct smatch_state *state)
 {
         get_dinfo(state)->capped = true;
 }
 
+bool estate_treat_untagged(struct smatch_state *state)
+{
+        if (!state)
+                return false;
+
+        /* impossible states are capped */
+        if (!estate_rl(state))
+                return true;
+
+        return get_dinfo(state)->treat_untagged;
+}
+
+void estate_set_treat_untagged(struct smatch_state *state)
+{
+        get_dinfo(state)->treat_untagged = true;
+}
+
 sval_t estate_min(struct smatch_state *state)
 {
         return rl_min(estate_rl(state));
 }
 

@@ -202,10 +222,12 @@
                 return 1;
         if (!rlists_equiv(estate_related(one), estate_related(two)))
                 return 0;
         if (estate_capped(one) != estate_capped(two))
                 return 0;
+        if (estate_treat_untagged(one) != estate_treat_untagged(two))
+                return 0;
         if (strcmp(one->name, two->name) == 0)
                 return 1;
         return 0;
 }
 

@@ -232,10 +254,12 @@
 
 int estate_get_single_value(struct smatch_state *state, sval_t *sval)
 {
         sval_t min, max;
 
+        if (!estate_rl(state))
+                return 0;
         min = rl_min(estate_rl(state));
         max = rl_max(estate_rl(state));
         if (sval_cmp(min, max) != 0)
                 return 0;
         *sval = min;