Make exception_wrapper::throwException() strict
Summary: The definition of `throwException()` is changed to add the `[[noreturn]]` attribute for consistency with `std::rethrow_exception`. If the `exception_wrapper` contains an exception, that is rethrown; if not, then `std::terminate` is called. An alternative design which threw an exception if the `exception_wrapper` did not contain an exception was rejected because of the ambiguity it introduced as to whether the exception thrown was wrapped or not. Benchmarks before: ``` ============================================================================ folly/test/ExceptionWrapperBenchmark.cpp relative time/iter iters/s ============================================================================ exception_ptr_create_and_test 1.45us 689.01K exception_wrapper_create_and_test 4337.80% 33.46ns 29.89M ---------------------------------------------------------------------------- exception_ptr_create_and_test_concurrent 342.99us 2.92K exception_wrapper_create_and_test_concurrent 101.41% 338.21us 2.96K ---------------------------------------------------------------------------- exception_ptr_create_and_throw 3.05us 327.89K exception_wrapper_create_and_throw 140.22% 2.17us 459.77K exception_wrapper_create_and_cast 8956.80% 34.05ns 29.37M ---------------------------------------------------------------------------- exception_ptr_create_and_throw_concurrent 372.68us 2.68K exception_wrapper_create_and_throw_concurrent 102.54% 363.44us 2.75K exception_wrapper_create_and_cast_concurrent 110.93% 335.97us 2.98K ============================================================================ ``` and after: ``` ============================================================================ folly/test/ExceptionWrapperBenchmark.cpp relative time/iter iters/s ============================================================================ exception_ptr_create_and_test 1.46us 684.09K exception_wrapper_create_and_test 4368.84% 33.46ns 29.89M ---------------------------------------------------------------------------- exception_ptr_create_and_test_concurrent 341.20us 2.93K exception_wrapper_create_and_test_concurrent 99.88% 341.60us 2.93K ---------------------------------------------------------------------------- exception_ptr_create_and_throw 3.08us 324.93K exception_wrapper_create_and_throw 106.93% 2.88us 347.46K exception_wrapper_create_and_cast 9532.05% 32.29ns 30.97M ---------------------------------------------------------------------------- exception_ptr_create_and_throw_concurrent 363.73us 2.75K exception_wrapper_create_and_throw_concurrent 101.04% 360.00us 2.78K exception_wrapper_create_and_cast_concurrent 104.50% 348.07us 2.87K ============================================================================ ``` Reviewed By: yfeldblum Differential Revision: D3923939 fbshipit-source-id: 6fc58ac571e59e4122f1fbd194c678e3a3841057
Showing
Please register or sign in to comment