Skip to content

Commit 0fd8f64

Browse files
committed
Use LLVM-C APIs for getting/setting visibility
1 parent 7dea6ff commit 0fd8f64

File tree

3 files changed

+6
-45
lines changed

3 files changed

+6
-45
lines changed

Diff for: compiler/rustc_codegen_llvm/src/llvm/ffi.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -160,9 +160,9 @@ pub enum Linkage {
160160
LinkerPrivateWeakLinkage = 16,
161161
}
162162

163-
// LLVMRustVisibility
163+
/// Must match the layout of `LLVMVisibility`.
164164
#[repr(C)]
165-
#[derive(Copy, Clone, PartialEq)]
165+
#[derive(Copy, Clone, PartialEq, TryFromU32)]
166166
pub enum Visibility {
167167
Default = 0,
168168
Hidden = 1,
@@ -983,6 +983,8 @@ unsafe extern "C" {
983983
pub fn LLVMGetLinkage(Global: &Value) -> RawEnum<Linkage>;
984984
pub fn LLVMSetLinkage(Global: &Value, RustLinkage: Linkage);
985985
pub fn LLVMSetSection(Global: &Value, Section: *const c_char);
986+
pub fn LLVMGetVisibility(Global: &Value) -> RawEnum<Visibility>;
987+
pub fn LLVMSetVisibility(Global: &Value, Viz: Visibility);
986988
pub fn LLVMGetAlignment(Global: &Value) -> c_uint;
987989
pub fn LLVMSetAlignment(Global: &Value, Bytes: c_uint);
988990
pub fn LLVMSetDLLStorageClass(V: &Value, C: DLLStorageClass);
@@ -1558,8 +1560,6 @@ unsafe extern "C" {
15581560
) -> bool;
15591561

15601562
// Operations on global variables, functions, and aliases (globals)
1561-
pub fn LLVMRustGetVisibility(Global: &Value) -> Visibility;
1562-
pub fn LLVMRustSetVisibility(Global: &Value, Viz: Visibility);
15631563
pub fn LLVMRustSetDSOLocal(Global: &Value, is_dso_local: bool);
15641564

15651565
// Operations on global variables

Diff for: compiler/rustc_codegen_llvm/src/llvm/mod.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -243,12 +243,12 @@ pub fn set_linkage(llglobal: &Value, linkage: Linkage) {
243243
}
244244

245245
pub fn get_visibility(llglobal: &Value) -> Visibility {
246-
unsafe { LLVMRustGetVisibility(llglobal) }
246+
unsafe { LLVMGetVisibility(llglobal) }.to_rust()
247247
}
248248

249249
pub fn set_visibility(llglobal: &Value, visibility: Visibility) {
250250
unsafe {
251-
LLVMRustSetVisibility(llglobal, visibility);
251+
LLVMSetVisibility(llglobal, visibility);
252252
}
253253
}
254254

Diff for: compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp

-39
Original file line numberDiff line numberDiff line change
@@ -1646,45 +1646,6 @@ extern "C" bool LLVMRustConstInt128Get(LLVMValueRef CV, bool sext,
16461646
return true;
16471647
}
16481648

1649-
enum class LLVMRustVisibility {
1650-
Default = 0,
1651-
Hidden = 1,
1652-
Protected = 2,
1653-
};
1654-
1655-
static LLVMRustVisibility toRust(LLVMVisibility Vis) {
1656-
switch (Vis) {
1657-
case LLVMDefaultVisibility:
1658-
return LLVMRustVisibility::Default;
1659-
case LLVMHiddenVisibility:
1660-
return LLVMRustVisibility::Hidden;
1661-
case LLVMProtectedVisibility:
1662-
return LLVMRustVisibility::Protected;
1663-
}
1664-
report_fatal_error("Invalid LLVMRustVisibility value!");
1665-
}
1666-
1667-
static LLVMVisibility fromRust(LLVMRustVisibility Vis) {
1668-
switch (Vis) {
1669-
case LLVMRustVisibility::Default:
1670-
return LLVMDefaultVisibility;
1671-
case LLVMRustVisibility::Hidden:
1672-
return LLVMHiddenVisibility;
1673-
case LLVMRustVisibility::Protected:
1674-
return LLVMProtectedVisibility;
1675-
}
1676-
report_fatal_error("Invalid LLVMRustVisibility value!");
1677-
}
1678-
1679-
extern "C" LLVMRustVisibility LLVMRustGetVisibility(LLVMValueRef V) {
1680-
return toRust(LLVMGetVisibility(V));
1681-
}
1682-
1683-
extern "C" void LLVMRustSetVisibility(LLVMValueRef V,
1684-
LLVMRustVisibility RustVisibility) {
1685-
LLVMSetVisibility(V, fromRust(RustVisibility));
1686-
}
1687-
16881649
extern "C" void LLVMRustSetDSOLocal(LLVMValueRef Global, bool is_dso_local) {
16891650
unwrap<GlobalValue>(Global)->setDSOLocal(is_dso_local);
16901651
}

0 commit comments

Comments
 (0)