diff options
| author | bors <bors@rust-lang.org> | 2024-11-09 04:43:51 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2024-11-09 04:43:51 +0000 |
| commit | 012ae13d6ac41fb4df649d39979f39b08241a290 (patch) | |
| tree | 3cf818f981b903a1beadb263e912f6ad29f8e803 /compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp | |
| parent | 328b759142ddeae96da83176f103200009d3e3f1 (diff) | |
| parent | 89d7efaf8f5ed8c1c15faea21824ae479656bdc1 (diff) | |
| download | rust-012ae13d6ac41fb4df649d39979f39b08241a290.tar.gz rust-012ae13d6ac41fb4df649d39979f39b08241a290.zip | |
Auto merge of #132549 - Zalathar:rust-string, r=cuviper
Make `RustString` an extern type to avoid `improper_ctypes` warnings Currently, any FFI function that uses `&RustString` needs to also add `#[ignore(improper_ctypes)]` to silence a warning. The warning is not _completely_ bogus, because `RustString` contains `Vec<u8>` and therefore does not have a guaranteed layout. But we have no way of telling the lint that this doesn't matter, because the C++ code only uses that pointer opaquely and never relies on its underlying layout. Ideally there would be some way to silence `improper_ctypes` at the type-definition site. But because there isn't, casting to and from a separate extern type is better than having to annotate every single use site.
Diffstat (limited to 'compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp')
| -rw-r--r-- | compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp b/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp index a68eed03e61..f739b010c30 100644 --- a/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp +++ b/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp @@ -1510,8 +1510,8 @@ LLVMRustUnpackSMDiagnostic(LLVMSMDiagnosticRef DRef, RustStringRef MessageOut, const SourceMgr &LSM = *D.getSourceMgr(); const MemoryBuffer *LBuf = LSM.getMemoryBuffer(LSM.FindBufferContainingLoc(D.getLoc())); - LLVMRustStringWriteImpl(BufferOut, LBuf->getBufferStart(), - LBuf->getBufferSize()); + auto BufferOS = RawRustStringOstream(BufferOut); + BufferOS << LBuf->getBuffer(); *LocOut = D.getLoc().getPointer() - LBuf->getBufferStart(); |
