Use LLVMGetTypeKind
This commit is contained in:
parent
c64c6d85e1
commit
e193b5342b
3 changed files with 11 additions and 61 deletions
|
|
@ -333,10 +333,15 @@ impl RealPredicate {
|
|||
}
|
||||
}
|
||||
|
||||
/// LLVMTypeKind
|
||||
#[derive(Copy, Clone, PartialEq, Debug)]
|
||||
/// Must match the layout of `LLVMTypeKind`.
|
||||
///
|
||||
/// Use [`RawEnum<TypeKind>`] for values of `LLVMTypeKind` returned from LLVM,
|
||||
/// to avoid risk of UB if LLVM adds new enum values.
|
||||
///
|
||||
/// All of LLVM's variants should be declared here, even if no Rust-side code refers
|
||||
/// to them, because unknown variants will cause [`RawEnum::to_rust`] to panic.
|
||||
#[derive(Copy, Clone, PartialEq, Debug, TryFromU32)]
|
||||
#[repr(C)]
|
||||
#[expect(dead_code, reason = "Some variants are unused, but are kept to match LLVM-C")]
|
||||
pub(crate) enum TypeKind {
|
||||
Void = 0,
|
||||
Half = 1,
|
||||
|
|
@ -1047,6 +1052,8 @@ unsafe extern "C" {
|
|||
CanThrow: llvm::Bool,
|
||||
) -> &'ll Value;
|
||||
|
||||
pub(crate) safe fn LLVMGetTypeKind(Ty: &Type) -> RawEnum<TypeKind>;
|
||||
|
||||
// Operations on integer types
|
||||
pub(crate) fn LLVMInt1TypeInContext(C: &Context) -> &Type;
|
||||
pub(crate) fn LLVMInt8TypeInContext(C: &Context) -> &Type;
|
||||
|
|
@ -1842,9 +1849,6 @@ unsafe extern "C" {
|
|||
// Create and destroy contexts.
|
||||
pub(crate) fn LLVMRustContextCreate(shouldDiscardNames: bool) -> &'static mut Context;
|
||||
|
||||
/// See llvm::LLVMTypeKind::getTypeID.
|
||||
pub(crate) fn LLVMRustGetTypeKind(Ty: &Type) -> TypeKind;
|
||||
|
||||
// Operations on all values
|
||||
pub(crate) fn LLVMRustGlobalAddMetadata<'a>(
|
||||
Val: &'a Value,
|
||||
|
|
|
|||
|
|
@ -204,7 +204,7 @@ impl<'ll, CX: Borrow<SCx<'ll>>> BaseTypeCodegenMethods for GenericCx<'ll, CX> {
|
|||
}
|
||||
|
||||
fn type_kind(&self, ty: &'ll Type) -> TypeKind {
|
||||
unsafe { llvm::LLVMRustGetTypeKind(ty).to_generic() }
|
||||
llvm::LLVMGetTypeKind(ty).to_rust().to_generic()
|
||||
}
|
||||
|
||||
fn type_ptr(&self) -> &'ll Type {
|
||||
|
|
|
|||
|
|
@ -1460,60 +1460,6 @@ LLVMRustGetDiagInfoKind(LLVMDiagnosticInfoRef DI) {
|
|||
return toRust((DiagnosticKind)unwrap(DI)->getKind());
|
||||
}
|
||||
|
||||
// This is kept distinct from LLVMGetTypeKind, because when
|
||||
// a new type kind is added, the Rust-side enum must be
|
||||
// updated or UB will result.
|
||||
extern "C" LLVMTypeKind LLVMRustGetTypeKind(LLVMTypeRef Ty) {
|
||||
switch (unwrap(Ty)->getTypeID()) {
|
||||
case Type::VoidTyID:
|
||||
return LLVMVoidTypeKind;
|
||||
case Type::HalfTyID:
|
||||
return LLVMHalfTypeKind;
|
||||
case Type::FloatTyID:
|
||||
return LLVMFloatTypeKind;
|
||||
case Type::DoubleTyID:
|
||||
return LLVMDoubleTypeKind;
|
||||
case Type::X86_FP80TyID:
|
||||
return LLVMX86_FP80TypeKind;
|
||||
case Type::FP128TyID:
|
||||
return LLVMFP128TypeKind;
|
||||
case Type::PPC_FP128TyID:
|
||||
return LLVMPPC_FP128TypeKind;
|
||||
case Type::LabelTyID:
|
||||
return LLVMLabelTypeKind;
|
||||
case Type::MetadataTyID:
|
||||
return LLVMMetadataTypeKind;
|
||||
case Type::IntegerTyID:
|
||||
return LLVMIntegerTypeKind;
|
||||
case Type::FunctionTyID:
|
||||
return LLVMFunctionTypeKind;
|
||||
case Type::StructTyID:
|
||||
return LLVMStructTypeKind;
|
||||
case Type::ArrayTyID:
|
||||
return LLVMArrayTypeKind;
|
||||
case Type::PointerTyID:
|
||||
return LLVMPointerTypeKind;
|
||||
case Type::FixedVectorTyID:
|
||||
return LLVMVectorTypeKind;
|
||||
case Type::TokenTyID:
|
||||
return LLVMTokenTypeKind;
|
||||
case Type::ScalableVectorTyID:
|
||||
return LLVMScalableVectorTypeKind;
|
||||
case Type::BFloatTyID:
|
||||
return LLVMBFloatTypeKind;
|
||||
case Type::X86_AMXTyID:
|
||||
return LLVMX86_AMXTypeKind;
|
||||
default: {
|
||||
std::string error;
|
||||
auto stream = llvm::raw_string_ostream(error);
|
||||
stream << "Rust does not support the TypeID: " << unwrap(Ty)->getTypeID()
|
||||
<< " for the type: " << *unwrap(Ty);
|
||||
stream.flush();
|
||||
report_fatal_error(error.c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(SMDiagnostic, LLVMSMDiagnosticRef)
|
||||
|
||||
extern "C" LLVMSMDiagnosticRef LLVMRustGetSMDiagnostic(LLVMDiagnosticInfoRef DI,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue