Worked in collaboration with Sebastian Pop.
We add noreturn to all the functions in libcxx which would throw (when exceptions are enabled). That helps the compiler make useful optimization decisions.
The only place we have not inserted the noreturn is include/__split_buffer because there is no function definition of throw_length_error/throw_out_of_range, so it was not obvious if these functions would definitely throw.
This should probably be