mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 00:03:43 +00:00
Move LLVMRustAttribute[Kind]
out of LLVMWrapper.h
This commit is contained in:
parent
42188c3ca8
commit
44a056a50b
@ -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)]
|
||||||
|
@ -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;
|
||||||
|
@ -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)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user