From ed217a53ff959414e9c723d8fecf80bc797a5a77 Mon Sep 17 00:00:00 2001 From: Amanieu d'Antras Date: Wed, 1 Jan 2020 22:24:39 +0100 Subject: [PATCH] Explain flag value of 8 for msvc_try --- src/librustc_codegen_llvm/intrinsic.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/librustc_codegen_llvm/intrinsic.rs b/src/librustc_codegen_llvm/intrinsic.rs index 5adff0d1f9233..27308cabd45e6 100644 --- a/src/librustc_codegen_llvm/intrinsic.rs +++ b/src/librustc_codegen_llvm/intrinsic.rs @@ -952,11 +952,15 @@ fn codegen_msvc_try( let cs = catchswitch.catch_switch(None, None, 1); catchswitch.add_handler(cs, catchpad.llbb()); + // The flag value of 8 indicates that we are catching the exception by + // reference instead of by value. + // + // Source: MicrosoftCXXABI::getAddrOfCXXCatchHandlerType in clang + let flags = bx.const_i32(8); let tydesc = match bx.tcx().lang_items().eh_catch_typeinfo() { Some(did) => bx.get_static(did), None => bug!("eh_catch_typeinfo not defined, but needed for SEH unwinding"), }; - let flags = bx.const_i32(8); // Catch by reference let funclet = catchpad.catch_pad(cs, &[tydesc, flags, slot]); let i64_align = bx.tcx().data_layout.i64_align.abi;