To suppress the byte-compiler warning, try adding this before your code, starting in column 0 (leftmost): (declare-function increase-count "your-file-name.el") `C-h f declare-function` tells you: > **`declare-function`** is a Lisp macro in `subr.el`. > `(declare-function FN FILE &optional ARGLIST FILEONLY)` > Tell the byte-compiler that function `FN` is defined, in `FILE`. The `FILE` argument is not used by the byte-compiler, but by the `check-declare` package, which checks that FILE contains a definition for `FN`. > `FILE` can be either a Lisp file (in which case the `".el"` extension is optional), or a C file. C files are expanded relative to the Emacs `"src/"` directory. Lisp files are searched for using `locate-library`, and if that fails they are expanded relative to the location of the file containing the declaration. A `FILE` with an `"ext:"` prefix is an external file. `check-declare` will check such files if they are found, and skip them without error if they are not. > Optional `ARGLIST` specifies `FN`’s arguments, or is `t` to not specify `FN`’s arguments. An omitted `ARGLIST` defaults to `t`, not `nil`: a `nil` `ARGLIST` specifies an empty argument list, and an explicit `t` `ARGLIST` is a placeholder that allows supplying a later arg. > Optional `FILEONLY` non-`nil` means that `check-declare` will check only that `FILE` exists, not that it defines `FN`. This is intended for function definitions that `check-declare` does not recognize, e.g., `defstruct`. > Note that for the purposes of `check-declare`, this statement must be the first non-whitespace on a line. > For more information, see Info node [**`(elisp)Declaring Functions`**](https://www.gnu.org/software/emacs/manual/html_node/elisp/Declaring-Functions.html).