Exercise a method containing a `try' statement with several
instructions with a `finally' clause but without any `catch' block,
enclosed in a loop.

When dx processes an integer division (or modulo) enclosing a `try'
block and whose result is assigned to a local value, it is smart
enough not to emit a `div-int' (or `rem-int') instruction when the
divisor is non-null, as it wouldn't be used.  However, dx is not
that clever regarding exception handling: if the divisor is known to
be non-null at compile-time (as is the case in this test), it will
still emit a block with the exception catching and rethrowing
mechanism, even if it is not used.

This used to be a problem for a `try' block followed by a `finally'
clause but with no `catch' block: in that case, the generated Dex code
item would list zero catch block for this method (see
art::CodeItem::tries_size_) and the optimizing compiler would have no
clue that it contains a `try' statement, which it cannot optimize
(yet).  With no hint that this method might contain one (or several)
special block(s) related to `catch'-less `try' statement(s), the
optimizing compiler considered this (these) as dead block(s) and
improperly tried to remove its (their) instructions, sometimes
removing instructions used by others instructions, thus triggering
assertions.  The optimizing compiler was thus adjusted to remove these
instructions in a proper fashion, by removing them as users first, and
then by suppressing them for good.
