elisp: Compiler Errors

 
 16.6 Compiler Errors
 ====================
 
 Error and warning messages from byte compilation are printed in a buffer
 named ‘*Compile-Log*’.  These messages include file names and line
 numbers identifying the location of the problem.  The usual Emacs
 commands for operating on compiler output can be used on these messages.
 
    When an error is due to invalid syntax in the program, the byte
 compiler might get confused about the error’s exact location.  One way
 to investigate is to switch to the buffer ‘ *Compiler Input*’.  (This
 buffer name starts with a space, so it does not show up in the Buffer
 Menu.)  This buffer contains the program being compiled, and point shows
 how far the byte compiler was able to read; the cause of the error might
 be nearby.  SeeSyntax Errors, for some tips for locating syntax
 errors.
 
    A common type of warning issued by the byte compiler is for functions
 and variables that were used but not defined.  Such warnings report the
 line number for the end of the file, not the locations where the missing
 functions or variables were used; to find these, you must search the
 file manually.
 
    If you are sure that a warning message about a missing function or
 variable is unjustified, there are several ways to suppress it:
 
    • You can suppress the warning for a specific call to a function FUNC
      by conditionalizing it on an ‘fboundp’ test, like this:
 
           (if (fboundp 'FUNC) ...(FUNC ...)...)
 
      The call to FUNC must be in the THEN-FORM of the ‘if’, and FUNC
      must appear quoted in the call to ‘fboundp’.  (This feature
      operates for ‘cond’ as well.)
 
    • Likewise, you can suppress the warning for a specific use of a
      variable VARIABLE by conditionalizing it on a ‘boundp’ test:
 
           (if (boundp 'VARIABLE) ...VARIABLE...)
 
      The reference to VARIABLE must be in the THEN-FORM of the ‘if’, and
      VARIABLE must appear quoted in the call to ‘boundp’.
 
    • You can tell the compiler that a function is defined using
      ‘declare-function’.  SeeDeclaring Functions.
 
    • Likewise, you can tell the compiler that a variable is defined
      using ‘defvar’ with no initial value.  (Note that this marks the
      variable as special.)  SeeDefining Variables.
 
    You can also suppress any and all compiler warnings within a certain
 expression using the construct ‘with-no-warnings’:
 
  -- Special Form: with-no-warnings body...
      In execution, this is equivalent to ‘(progn BODY...)’, but the
      compiler does not issue warnings for anything that occurs inside
      BODY.
 
      We recommend that you use this construct around the smallest
      possible piece of code, to avoid missing possible warnings other
      than one you intend to suppress.
 
    Byte compiler warnings can be controlled more precisely by setting
 the variable ‘byte-compile-warnings’.  See its documentation string for
 details.