Given this structured-concurrency code, what happens to the parent coroutine and the sibling child when `childB` throws?
suspend fun run() = coroutineScope {
val childA = launch { delay(1000); println("A") }
val childB = launch { throw IllegalStateException("boom") }
}