'Store a variable into the storage.
:param LocationAndVariable loc_and_var: The descriptor describing start address and the variable.
:param bool overwrite: Whether existing variables should be overwritten or not.
:return: None'

def __store(self, loc_and_var, overwrite=False, make_phi_func=None):

    start = loc_and_var.start
    variable = loc_and_var.variable
    variable_size = (variable.size if (variable.size is not None) else 1)
    end = (start + variable_size)
    overlapping_items = list(self._storage.item_slice(start, end))
    try:
        (floor_key, floor_item) = self._storage.floor_item(start)
        if floor_item.includes(start):
            item = (floor_key, floor_item)
            if (item not in overlapping_items):
                overlapping_items.insert(0, (floor_key, floor_item))
    except KeyError:
        pass
    to_update = {start: RegionObject(start, variable_size, {loc_and_var})}
    last_end = start
    for (_, item) in overlapping_items:
        if (item.start < start):
            (a, b) = item.split(start)
            if overwrite:
                b.set_object(loc_and_var)
            else:
                self._add_object_or_make_phi(b, loc_and_var, make_phi_func=make_phi_func)
            to_update[a.start] = a
            to_update[b.start] = b
            last_end = b.end
        elif (item.start > last_end):
            new_item = RegionObject(last_end, (item.start - last_end), {loc_and_var})
            to_update[new_item.start] = new_item
            last_end = new_item.end
        elif (item.end > end):
            (a, b) = item.split(end)
            if overwrite:
                a.set_object(loc_and_var)
            else:
                self._add_object_or_make_phi(a, loc_and_var, make_phi_func=make_phi_func)
            to_update[a.start] = a
            to_update[b.start] = b
            last_end = b.end
        else:
            if overwrite:
                item.set_object(loc_and_var)
            else:
                self._add_object_or_make_phi(item, loc_and_var, make_phi_func=make_phi_func)
            to_update[loc_and_var.start] = item
    self._storage.update(to_update)
