Move LLVMRustAttribute[Kind] out of LLVMWrapper.h

This commit is contained in:
Zalathar 2024-11-04 12:11:01 +11:00
parent 42188c3ca8
commit 44a056a50b
3 changed files with 92 additions and 91 deletions

View File

@ -204,7 +204,7 @@ pub enum DLLStorageClass {
DllExport = 2, // Function to be accessible from DLL. DllExport = 2, // Function to be accessible from DLL.
} }
/// Matches LLVMRustAttribute in LLVMWrapper.h /// Must match the layout of `LLVMRustAttributeKind`.
/// Semantically a subset of the C++ enum llvm::Attribute::AttrKind, /// Semantically a subset of the C++ enum llvm::Attribute::AttrKind,
/// though it is not ABI compatible (since it's a C++ enum) /// though it is not ABI compatible (since it's a C++ enum)
#[repr(C)] #[repr(C)]

View File

@ -55,51 +55,6 @@ extern "C" void LLVMRustSetLastError(const char *);
enum class LLVMRustResult { Success, Failure }; enum class LLVMRustResult { Success, Failure };
enum LLVMRustAttribute {
AlwaysInline = 0,
ByVal = 1,
Cold = 2,
InlineHint = 3,
MinSize = 4,
Naked = 5,
NoAlias = 6,
NoCapture = 7,
NoInline = 8,
NonNull = 9,
NoRedZone = 10,
NoReturn = 11,
NoUnwind = 12,
OptimizeForSize = 13,
ReadOnly = 14,
SExt = 15,
StructRet = 16,
UWTable = 17,
ZExt = 18,
InReg = 19,
SanitizeThread = 20,
SanitizeAddress = 21,
SanitizeMemory = 22,
NonLazyBind = 23,
OptimizeNone = 24,
ReadNone = 26,
SanitizeHWAddress = 28,
WillReturn = 29,
StackProtectReq = 30,
StackProtectStrong = 31,
StackProtect = 32,
NoUndef = 33,
SanitizeMemTag = 34,
NoCfCheck = 35,
ShadowCallStack = 36,
AllocSize = 37,
AllocatedPointer = 38,
AllocAlign = 39,
SanitizeSafeStack = 40,
FnRetThunkExtern = 41,
Writable = 42,
DeadOnUnwind = 43,
};
typedef struct OpaqueRustString *RustStringRef; typedef struct OpaqueRustString *RustStringRef;
typedef struct LLVMOpaqueTwine *LLVMTwineRef; typedef struct LLVMOpaqueTwine *LLVMTwineRef;
typedef struct LLVMOpaqueSMDiagnostic *LLVMSMDiagnosticRef; typedef struct LLVMOpaqueSMDiagnostic *LLVMSMDiagnosticRef;

View File

@ -228,94 +228,140 @@ extern "C" LLVMValueRef LLVMRustInsertPrivateGlobal(LLVMModuleRef M,
GlobalValue::PrivateLinkage, nullptr)); GlobalValue::PrivateLinkage, nullptr));
} }
static Attribute::AttrKind fromRust(LLVMRustAttribute Kind) { // Must match the layout of `rustc_codegen_llvm::llvm::ffi::AttributeKind`.
enum class LLVMRustAttributeKind {
AlwaysInline = 0,
ByVal = 1,
Cold = 2,
InlineHint = 3,
MinSize = 4,
Naked = 5,
NoAlias = 6,
NoCapture = 7,
NoInline = 8,
NonNull = 9,
NoRedZone = 10,
NoReturn = 11,
NoUnwind = 12,
OptimizeForSize = 13,
ReadOnly = 14,
SExt = 15,
StructRet = 16,
UWTable = 17,
ZExt = 18,
InReg = 19,
SanitizeThread = 20,
SanitizeAddress = 21,
SanitizeMemory = 22,
NonLazyBind = 23,
OptimizeNone = 24,
ReadNone = 26,
SanitizeHWAddress = 28,
WillReturn = 29,
StackProtectReq = 30,
StackProtectStrong = 31,
StackProtect = 32,
NoUndef = 33,
SanitizeMemTag = 34,
NoCfCheck = 35,
ShadowCallStack = 36,
AllocSize = 37,
AllocatedPointer = 38,
AllocAlign = 39,
SanitizeSafeStack = 40,
FnRetThunkExtern = 41,
Writable = 42,
DeadOnUnwind = 43,
};
static Attribute::AttrKind fromRust(LLVMRustAttributeKind Kind) {
switch (Kind) { switch (Kind) {
case AlwaysInline: case LLVMRustAttributeKind::AlwaysInline:
return Attribute::AlwaysInline; return Attribute::AlwaysInline;
case ByVal: case LLVMRustAttributeKind::ByVal:
return Attribute::ByVal; return Attribute::ByVal;
case Cold: case LLVMRustAttributeKind::Cold:
return Attribute::Cold; return Attribute::Cold;
case InlineHint: case LLVMRustAttributeKind::InlineHint:
return Attribute::InlineHint; return Attribute::InlineHint;
case MinSize: case LLVMRustAttributeKind::MinSize:
return Attribute::MinSize; return Attribute::MinSize;
case Naked: case LLVMRustAttributeKind::Naked:
return Attribute::Naked; return Attribute::Naked;
case NoAlias: case LLVMRustAttributeKind::NoAlias:
return Attribute::NoAlias; return Attribute::NoAlias;
case NoCapture: case LLVMRustAttributeKind::NoCapture:
return Attribute::NoCapture; return Attribute::NoCapture;
case NoCfCheck: case LLVMRustAttributeKind::NoCfCheck:
return Attribute::NoCfCheck; return Attribute::NoCfCheck;
case NoInline: case LLVMRustAttributeKind::NoInline:
return Attribute::NoInline; return Attribute::NoInline;
case NonNull: case LLVMRustAttributeKind::NonNull:
return Attribute::NonNull; return Attribute::NonNull;
case NoRedZone: case LLVMRustAttributeKind::NoRedZone:
return Attribute::NoRedZone; return Attribute::NoRedZone;
case NoReturn: case LLVMRustAttributeKind::NoReturn:
return Attribute::NoReturn; return Attribute::NoReturn;
case NoUnwind: case LLVMRustAttributeKind::NoUnwind:
return Attribute::NoUnwind; return Attribute::NoUnwind;
case OptimizeForSize: case LLVMRustAttributeKind::OptimizeForSize:
return Attribute::OptimizeForSize; return Attribute::OptimizeForSize;
case ReadOnly: case LLVMRustAttributeKind::ReadOnly:
return Attribute::ReadOnly; return Attribute::ReadOnly;
case SExt: case LLVMRustAttributeKind::SExt:
return Attribute::SExt; return Attribute::SExt;
case StructRet: case LLVMRustAttributeKind::StructRet:
return Attribute::StructRet; return Attribute::StructRet;
case UWTable: case LLVMRustAttributeKind::UWTable:
return Attribute::UWTable; return Attribute::UWTable;
case ZExt: case LLVMRustAttributeKind::ZExt:
return Attribute::ZExt; return Attribute::ZExt;
case InReg: case LLVMRustAttributeKind::InReg:
return Attribute::InReg; return Attribute::InReg;
case SanitizeThread: case LLVMRustAttributeKind::SanitizeThread:
return Attribute::SanitizeThread; return Attribute::SanitizeThread;
case SanitizeAddress: case LLVMRustAttributeKind::SanitizeAddress:
return Attribute::SanitizeAddress; return Attribute::SanitizeAddress;
case SanitizeMemory: case LLVMRustAttributeKind::SanitizeMemory:
return Attribute::SanitizeMemory; return Attribute::SanitizeMemory;
case NonLazyBind: case LLVMRustAttributeKind::NonLazyBind:
return Attribute::NonLazyBind; return Attribute::NonLazyBind;
case OptimizeNone: case LLVMRustAttributeKind::OptimizeNone:
return Attribute::OptimizeNone; return Attribute::OptimizeNone;
case ReadNone: case LLVMRustAttributeKind::ReadNone:
return Attribute::ReadNone; return Attribute::ReadNone;
case SanitizeHWAddress: case LLVMRustAttributeKind::SanitizeHWAddress:
return Attribute::SanitizeHWAddress; return Attribute::SanitizeHWAddress;
case WillReturn: case LLVMRustAttributeKind::WillReturn:
return Attribute::WillReturn; return Attribute::WillReturn;
case StackProtectReq: case LLVMRustAttributeKind::StackProtectReq:
return Attribute::StackProtectReq; return Attribute::StackProtectReq;
case StackProtectStrong: case LLVMRustAttributeKind::StackProtectStrong:
return Attribute::StackProtectStrong; return Attribute::StackProtectStrong;
case StackProtect: case LLVMRustAttributeKind::StackProtect:
return Attribute::StackProtect; return Attribute::StackProtect;
case NoUndef: case LLVMRustAttributeKind::NoUndef:
return Attribute::NoUndef; return Attribute::NoUndef;
case SanitizeMemTag: case LLVMRustAttributeKind::SanitizeMemTag:
return Attribute::SanitizeMemTag; return Attribute::SanitizeMemTag;
case ShadowCallStack: case LLVMRustAttributeKind::ShadowCallStack:
return Attribute::ShadowCallStack; return Attribute::ShadowCallStack;
case AllocSize: case LLVMRustAttributeKind::AllocSize:
return Attribute::AllocSize; return Attribute::AllocSize;
case AllocatedPointer: case LLVMRustAttributeKind::AllocatedPointer:
return Attribute::AllocatedPointer; return Attribute::AllocatedPointer;
case AllocAlign: case LLVMRustAttributeKind::AllocAlign:
return Attribute::AllocAlign; return Attribute::AllocAlign;
case SanitizeSafeStack: case LLVMRustAttributeKind::SanitizeSafeStack:
return Attribute::SafeStack; return Attribute::SafeStack;
case FnRetThunkExtern: case LLVMRustAttributeKind::FnRetThunkExtern:
return Attribute::FnRetThunkExtern; return Attribute::FnRetThunkExtern;
case Writable: case LLVMRustAttributeKind::Writable:
return Attribute::Writable; return Attribute::Writable;
case DeadOnUnwind: case LLVMRustAttributeKind::DeadOnUnwind:
return Attribute::DeadOnUnwind; return Attribute::DeadOnUnwind;
} }
report_fatal_error("bad AttributeKind"); report_fatal_error("bad LLVMRustAttributeKind");
} }
template <typename T> template <typename T>
@ -345,7 +391,7 @@ extern "C" void LLVMRustAddCallSiteAttributes(LLVMValueRef Instr,
} }
extern "C" LLVMAttributeRef extern "C" LLVMAttributeRef
LLVMRustCreateAttrNoValue(LLVMContextRef C, LLVMRustAttribute RustAttr) { LLVMRustCreateAttrNoValue(LLVMContextRef C, LLVMRustAttributeKind RustAttr) {
return wrap(Attribute::get(*unwrap(C), fromRust(RustAttr))); return wrap(Attribute::get(*unwrap(C), fromRust(RustAttr)));
} }