about summary refs log tree commit diff
path: root/src/rustllvm/RustWrapper.cpp
diff options
context:
space:
mode:
authorklutzy <klutzytheklutzy@gmail.com>2014-05-10 17:30:55 +0900
committerAlex Crichton <alex@alexcrichton.com>2014-05-13 17:24:08 -0700
commit9f7caed2024268f6de16f99b6696d191f3ca3228 (patch)
tree19345dd5d3980348cc53e87b7f2a06af0f4ed768 /src/rustllvm/RustWrapper.cpp
parent6878039c122211f227d6c42b7f08282629ceb6c4 (diff)
downloadrust-9f7caed2024268f6de16f99b6696d191f3ca3228.tar.gz
rust-9f7caed2024268f6de16f99b6696d191f3ca3228.zip
rustllvm: Add LLVMRustArrayType
LLVM internally uses `uint64_t` for array size, but the corresponding
C API (`LLVMArrayType`) uses `unsigned int` so ths value is truncated.
Therefore rustc generates wrong type for fixed-sized large vector e.g.
`[0 x i8]` for `[0u8, ..(1 << 32)]`.

This patch adds `LLVMRustArrayType` function for `uint64_t` support.
Diffstat (limited to 'src/rustllvm/RustWrapper.cpp')
-rw-r--r--src/rustllvm/RustWrapper.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/rustllvm/RustWrapper.cpp b/src/rustllvm/RustWrapper.cpp
index ec33b750358..717cd333a79 100644
--- a/src/rustllvm/RustWrapper.cpp
+++ b/src/rustllvm/RustWrapper.cpp
@@ -754,3 +754,9 @@ LLVMRustGetSectionName(LLVMSectionIteratorRef SI, const char **ptr) {
     *ptr = ret.data();
     return ret.size();
 }
+
+// LLVMArrayType function does not support 64-bit ElementCount
+extern "C" LLVMTypeRef
+LLVMRustArrayType(LLVMTypeRef ElementType, uint64_t ElementCount) {
+    return wrap(ArrayType::get(unwrap(ElementType), ElementCount));
+}