実行時チェックが挿入されるタイミングにも細かい修正が入っています。繰り返しますがAdaとは非常に動的な言語です。(あくまで静的な型を持つ中では、です。)静的と動的の境い目が曖昧であり静的に解決されるのが動的に解決されるのかでコードを書き分ける必要がありません。エラーの検出も含めて静的に解決できるものはして、解決しきれなかったら実行時に持ち越しみたいな感じです。(静的であることを意識しなければならない場合もあります。)で、まあ、その抜けですね。静的に解決できる場合は静的にチェックされますが、解決できなかった場合に動的にチェックされていなかったケースです。指名するとエラーです。型を経由するとわからなくなる場合もあります。あるブロックよりも寿命が短いです。型を経由することで実際のオブジェクトの寿命をわからなくしています。(この程度でしたらコンパイラが頑張れば検出できそうですが関数を経由する等で更に難解にできます。)コンパイラは静的にチェックしきれなかったら実行時にチェックするコードを生成しないといけないわけですがrequeue文に関してはそのルールが規格から抜けていたという話です。2020で修正されました。中でも注目すべき点としまして、変数が初期化されなかった場合はpredicateもチェックされません。型以外もデフォルト初期化できるようになりました。その際にpredicateをチェックすることを求める記述が規格にありませんでした。文面通りに捉えますとデフォルト初期化ではpredicateはチェックされないことになります。2020で修正され、デフォルト初期化でもpredicateがチェックされるようになります。パラメータに変数を渡したときにもpredicateがチェックされていました。初期化されていない変数を渡した時にもチェックされてしまいます。パラメータは結果を受け取るためのパラメータですので初期化されていない変数を渡すのは普通です。checkedこれではスタックやレジスタに残っていたゴミがチェックされてしまい予想できない結果になります。パラメータに変数を渡した時点ではpredicateがチェックされなくなります。サブプログラムの中で変更されたときや、値渡しだった場合のサブプログラムを出るときのコピー戻しではチェックされます。本来であればチェックしたほうがいいところをチェックしなくてもいいという結論になったケースもあります。パラメータや関数の返値についてチェックされます。抽象型にしか付けられず、抽象型はサブプログラムを通じてのみ変更されますのでサブプログラムを出るときにチェックすれば充分なはずです。場合によっては可視性が破られるケースもあります。抽象型と同じパッケージやその子パッケージにあるサブプログラムからはその抽象型の中身が見えてしまいます。そこでパラメータや返値以外から迂回してオブジェクトを参照して、要素のみを直接変更してしまえばチェックをすり抜けれられます。多態しませんのでダウンキャストも迂回ルートになります。