@@ -242,7 +242,7 @@ enum class LLVMRustAttributeKind {
242242 MinSize = 4 ,
243243 Naked = 5 ,
244244 NoAlias = 6 ,
245- NoCapture = 7 ,
245+ CapturesAddress = 7 ,
246246 NoInline = 8 ,
247247 NonNull = 9 ,
248248 NoRedZone = 10 ,
@@ -297,12 +297,6 @@ static Attribute::AttrKind fromRust(LLVMRustAttributeKind Kind) {
297297 return Attribute::Naked;
298298 case LLVMRustAttributeKind::NoAlias:
299299 return Attribute::NoAlias;
300- case LLVMRustAttributeKind::NoCapture:
301- #if LLVM_VERSION_GE(21, 0)
302- report_fatal_error (" NoCapture doesn't exist in LLVM 21" );
303- #else
304- return Attribute::NoCapture;
305- #endif
306300 case LLVMRustAttributeKind::NoCfCheck:
307301 return Attribute::NoCfCheck;
308302 case LLVMRustAttributeKind::NoInline:
@@ -377,6 +371,7 @@ static Attribute::AttrKind fromRust(LLVMRustAttributeKind Kind) {
377371#else
378372 report_fatal_error (" DeadOnReturn attribute requires LLVM 21 or later" );
379373#endif
374+ case LLVMRustAttributeKind::CapturesAddress:
380375 case LLVMRustAttributeKind::CapturesReadOnly:
381376 report_fatal_error (" Should be handled separately" );
382377 }
@@ -429,9 +424,9 @@ extern "C" void LLVMRustEraseInstFromParent(LLVMValueRef Instr) {
429424extern " C" LLVMAttributeRef
430425LLVMRustCreateAttrNoValue (LLVMContextRef C, LLVMRustAttributeKind RustAttr) {
431426#if LLVM_VERSION_GE(21, 0)
432- // LLVM 21 replaced the NoCapture attribute with Captures(none).
433- if (RustAttr == LLVMRustAttributeKind::NoCapture) {
434- return wrap ( Attribute::getWithCaptureInfo ( *unwrap (C), CaptureInfo::none ( )));
427+ if (RustAttr == LLVMRustAttributeKind::CapturesAddress) {
428+ return wrap ( Attribute::getWithCaptureInfo (
429+ *unwrap (C), CaptureInfo (CaptureComponents::Address )));
435430 }
436431 if (RustAttr == LLVMRustAttributeKind::CapturesReadOnly) {
437432 return wrap (Attribute::getWithCaptureInfo (
0 commit comments