about summary refs log tree commit diff
path: root/compiler/rustc_mir_transform/src/coverage/mod.rs
diff options
context:
space:
mode:
authorJosh Stone <jistone@redhat.com>2021-11-19 19:33:29 -0800
committerJosh Stone <jistone@redhat.com>2021-11-19 19:33:29 -0800
commit023cc968e1295994ed8039da43b0f2f4ea4e9390 (patch)
tree4bc92bd38d5dc3ff7f8f157eee092cd69dcd3a1f /compiler/rustc_mir_transform/src/coverage/mod.rs
parenta77da2d454e6caa227a85b16410b95f93495e7e0 (diff)
downloadrust-023cc968e1295994ed8039da43b0f2f4ea4e9390.tar.gz
rust-023cc968e1295994ed8039da43b0f2f4ea4e9390.zip
Make `LLVMRustGetOrInsertGlobal` always return a `GlobalVariable`
`Module::getOrInsertGlobal` returns a `Constant*`, which is a super
class of `GlobalVariable`, but if the given type doesn't match an
existing declaration, it returns a bitcast of that global instead.
This causes UB when we pass that to `LLVMGetVisibility` which
unconditionally casts the opaque argument to a `GlobalValue*`.

Instead, we can do our own get-or-insert without worrying whether
existing types match exactly. It's not relevant when we're just trying
to get/set the linkage and visibility, and if types are needed we can
bitcast or error nicely from `rustc_codegen_llvm` instead.
Diffstat (limited to 'compiler/rustc_mir_transform/src/coverage/mod.rs')
0 files changed, 0 insertions, 0 deletions