すべての関数を確実にアドバイズできるわけではありません。バイトコンパイラは、関数への呼び出しを、変更しようとしていた関数を呼び出さない一連の命令に置き換える場合があります。
これは通常、以下の3つのメカニズムのいずれかによって起こります。
byte-compile プロパティ関数のシンボルに byte-compile
プロパティがある場合、そのプロパティがシンボルの関数定義の代わりに使用されます。バイトコンパイル関数を参照してください。
byte-optimize プロパティ関数のシンボルに byte-optimize
プロパティがある場合、バイトコンパイラは関数の引数を書き換えたり、あるいは全く別の関数を使用することを決定したりすることがあります。
compiler-macro 宣言フォーム関数の定義において、特殊な compiler-macro declare 形式(declare 形式
を参照)を用いることができ、これにより関数のコンパイル時に呼び出す エクスパンダー
を定義できます。このエクスパンダーによって、生成されるバイトコードが元の関数を呼び出さないようにすることが可能です。