Выражение есть contextually converted to bool; если это преобразование сформировано неверно, значит, неверно сформирована программа.
В do операторе подзапрос выполняется многократно, пока значение выражения не станет равным false. Проверка проводится после каждого выполнения инструкции.