diff options
| author | Michael Woerister <michaelwoerister@posteo.net> | 2016-11-28 17:44:51 -0500 |
|---|---|---|
| committer | Michael Woerister <michaelwoerister@posteo.net> | 2016-12-05 11:05:25 -0500 |
| commit | d1a6d47f943d8df9d565de835babc1e2f3e8d45a (patch) | |
| tree | fa870471adbdad1375b41e8c4f544efa636c5ea8 /src/rustllvm/RustWrapper.cpp | |
| parent | 692d7cfb0ce5ba43311ae553a3debcf09755b6b9 (diff) | |
| download | rust-d1a6d47f943d8df9d565de835babc1e2f3e8d45a.tar.gz rust-d1a6d47f943d8df9d565de835babc1e2f3e8d45a.zip | |
Make LLVM symbol visibility FFI types more stable.
Diffstat (limited to 'src/rustllvm/RustWrapper.cpp')
| -rw-r--r-- | src/rustllvm/RustWrapper.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/rustllvm/RustWrapper.cpp b/src/rustllvm/RustWrapper.cpp index 51859a928c4..6a95b65d5e9 100644 --- a/src/rustllvm/RustWrapper.cpp +++ b/src/rustllvm/RustWrapper.cpp @@ -1408,3 +1408,45 @@ extern "C" void LLVMRustSetLinkage(LLVMValueRef V, LLVMRustLinkage RustLinkage) extern "C" LLVMContextRef LLVMRustGetValueContext(LLVMValueRef V) { return wrap(&unwrap(V)->getContext()); } + +enum class LLVMRustVisibility { + Default = 0, + Hidden = 1, + Protected = 2, +}; + +static LLVMRustVisibility to_rust(LLVMVisibility vis) { + switch (vis) { + case LLVMDefaultVisibility: + return LLVMRustVisibility::Default; + case LLVMHiddenVisibility: + return LLVMRustVisibility::Hidden; + case LLVMProtectedVisibility: + return LLVMRustVisibility::Protected; + + default: + llvm_unreachable("Invalid LLVMRustVisibility value!"); + } +} + +static LLVMVisibility from_rust(LLVMRustVisibility vis) { + switch (vis) { + case LLVMRustVisibility::Default: + return LLVMDefaultVisibility; + case LLVMRustVisibility::Hidden: + return LLVMHiddenVisibility; + case LLVMRustVisibility::Protected: + return LLVMProtectedVisibility; + + default: + llvm_unreachable("Invalid LLVMRustVisibility value!"); + } +} + +extern "C" LLVMRustVisibility LLVMRustGetVisibility(LLVMValueRef V) { + return to_rust(LLVMGetVisibility(V)); +} + +extern "C" void LLVMRustSetVisibility(LLVMValueRef V, LLVMRustVisibility RustVisibility) { + LLVMSetVisibility(V, from_rust(RustVisibility)); +} |
