diff options
| author | Josh Stone <jistone@redhat.com> | 2018-01-19 21:43:53 -0800 |
|---|---|---|
| committer | Josh Stone <jistone@redhat.com> | 2018-01-19 21:43:53 -0800 |
| commit | e2f6b280ea13e48bff86254549988e61eee37139 (patch) | |
| tree | 2e2ba3e290724c80b4b30444b4a15c0670df402a /src/rustllvm/RustWrapper.cpp | |
| parent | 5965b790142eff7a8546e947914e7a8e00c61575 (diff) | |
| download | rust-e2f6b280ea13e48bff86254549988e61eee37139.tar.gz rust-e2f6b280ea13e48bff86254549988e61eee37139.zip | |
Update DW_OP_plus to DW_OP_plus_uconst
LLVM <= 4.0 used a non-standard interpretation of `DW_OP_plus`. In the DWARF standard, this adds two items on the expressions stack. LLVM's behavior was more like DWARF's `DW_OP_plus_uconst` -- adding a constant that follows the op. The patch series starting with [D33892] switched to the standard DWARF interpretation, so we need to follow. [D33892]: https://reviews.llvm.org/D33892
Diffstat (limited to 'src/rustllvm/RustWrapper.cpp')
| -rw-r--r-- | src/rustllvm/RustWrapper.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/rustllvm/RustWrapper.cpp b/src/rustllvm/RustWrapper.cpp index 95130d596e1..0fe533d447b 100644 --- a/src/rustllvm/RustWrapper.cpp +++ b/src/rustllvm/RustWrapper.cpp @@ -866,7 +866,14 @@ extern "C" int64_t LLVMRustDIBuilderCreateOpDeref() { return dwarf::DW_OP_deref; } -extern "C" int64_t LLVMRustDIBuilderCreateOpPlus() { return dwarf::DW_OP_plus; } +extern "C" int64_t LLVMRustDIBuilderCreateOpPlusUconst() { +#if LLVM_VERSION_GE(5, 0) + return dwarf::DW_OP_plus_uconst; +#else + // older LLVM used `plus` to behave like `plus_uconst`. + return dwarf::DW_OP_plus; +#endif +} extern "C" void LLVMRustWriteTypeToString(LLVMTypeRef Ty, RustStringRef Str) { RawRustStringOstream OS(Str); |
