def storevar(self, value, name, argidx=None):
        """
        Store the value into the given variable.
        """
        fetype = self.typeof(name)
        # Define if not already
        self._alloca_var(name, fetype)

        # Store variable
        if (name in self._singly_assigned_vars and
                not self._disable_sroa_like_opt):
            self._blk_local_varmap[name] = value
        else:
            if argidx is None:
                # Clean up existing value stored in the variable, not needed
                # if it's an arg
                old = self.loadvar(name)
                self.decref(fetype, old)

            # stack stored variable
            ptr = self.getvar(name)
            if value.type != ptr.type.pointee:
                msg = ("Storing {value.type} to ptr of {ptr.type.pointee} "
                       "('{name}'). FE type {fetype}").format(value=value,
                                                              ptr=ptr,
                                                              fetype=fetype,
                                                              name=name)
                raise AssertionError(msg)

            # If this store is associated with an argument to the function (i.e.
            # store following reassemble from CC splatting structs as many args
            # to the function) then mark this variable as such.
            if argidx is not None:
                with debuginfo.suspend_emission(self.builder):
                    self.builder.store(value, ptr)
                loc = self.defn_loc # the line with `def <func>`
                lltype = self.context.get_value_type(fetype)
                sizeof = self.context.get_abi_sizeof(lltype)
                datamodel = self.context.data_model_manager[fetype]
                self.debuginfo.mark_variable(self.builder, ptr, name=name,
                                             lltype=lltype, size=sizeof,
                                             line=loc.line, datamodel=datamodel,
                                             argidx=argidx)
            else:
                self.builder.store(value, ptr)

        Store the value into the given variable.
        
numba/core/lowering.py