rust/compiler/rustc_llvm/llvm-wrapper
Josh Stone dcbf2f324f rustc_llvm: unwrap LLVMMetadataRef before casting
Directly casting the opaque pointer was [reported] to cause an
"incomplete type" error with GCC 9.3:

```
llvm-wrapper/RustWrapper.cpp:939:31:   required from here
/usr/include/c++/9.3/type_traits:1301:12: error: invalid use of incomplete type 'struct LLVMOpaqueMetadata'
 1301 |     struct is_base_of
      |            ^~~~~~~~~~
In file included from [...]/rust/src/llvm-project/llvm/include/llvm-c/BitReader.h:23,
                 from llvm-wrapper/LLVMWrapper.h:1,
                 from llvm-wrapper/RustWrapper.cpp:1:
[...]/rust/src/llvm-project/llvm/include/llvm-c/Types.h:89:16: note: forward declaration of 'struct LLVMOpaqueMetadata'
   89 | typedef struct LLVMOpaqueMetadata *LLVMMetadataRef;
      |                ^~~~~~~~~~~~~~~~~~
```

[reported]: https://zulip-archive.rust-lang.org/182449tcompilerhelp/12215halprustcllvmbuildfail.html#214915124

A simple `unwrap` fixes the issue.
2020-10-29 09:45:15 -07:00
..
.editorconfig Move rustllvm into rustc_llvm 2020-09-09 23:05:43 +03:00
ArchiveWrapper.cpp Move rustllvm into rustc_llvm 2020-09-09 23:05:43 +03:00
CoverageMappingWrapper.cpp Move rustllvm into rustc_llvm 2020-09-09 23:05:43 +03:00
Linker.cpp Move rustllvm into rustc_llvm 2020-09-09 23:05:43 +03:00
LLVMWrapper.h Move rustllvm into rustc_llvm 2020-09-09 23:05:43 +03:00
PassWrapper.cpp Use llvm::computeLTOCacheKey to determine post-ThinLTO CGU reuse 2020-09-17 22:04:13 -04:00
README Move rustllvm into rustc_llvm 2020-09-09 23:05:43 +03:00
RustWrapper.cpp rustc_llvm: unwrap LLVMMetadataRef before casting 2020-10-29 09:45:15 -07:00

This directory currently contains some LLVM support code. This will generally
be sent upstream to LLVM in time; for now it lives here.

NOTE: the LLVM C++ ABI is subject to between-version breakage and must *never*
be exposed to Rust. To allow for easy auditing of that, all Rust-exposed types
must be typedef-ed as "LLVMXyz", or "LLVMRustXyz" if they were defined here.

Functions that return a failure status and leave the error in
the LLVM last error should return an LLVMRustResult rather than an
int or anything to avoid confusion.

When translating enums, add a single `Other` variant as the first
one to allow for new variants to be added. It should abort when used
as an input.

All other types must not be typedef-ed as such.