diff options
| author | bors <bors@rust-lang.org> | 2025-02-02 23:15:58 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2025-02-02 23:15:58 +0000 |
| commit | 613bdd49978298648ed05ace086bd1ecad54b44a (patch) | |
| tree | 3725056656c352d9ce7ae60a63882868a3d6d104 /compiler/rustc_codegen_llvm/src | |
| parent | 4a43094662727040d8522163f295b19d1aed0e49 (diff) | |
| parent | a8055f944fb99a2d53b444b317d85ff9acbb5562 (diff) | |
| download | rust-613bdd49978298648ed05ace086bd1ecad54b44a.tar.gz rust-613bdd49978298648ed05ace086bd1ecad54b44a.zip | |
Auto merge of #136454 - matthiaskrgr:rollup-ewejzmp, r=matthiaskrgr
Rollup of 8 pull requests Successful merges: - #136145 (Test validity of pattern types) - #136339 (CompileTest: Add Directives to Ignore `arm-unknown-*` Targets) - #136403 (Fix malformed error annotations in a UI test) - #136414 (Shorten error message for callable with wrong return type) - #136425 (Move `rustc_middle::infer::unify_key`) - #136426 (Explain why we retroactively change a static initializer to have a different type) - #136445 (Couple of cleanups to DiagCtxt and EarlyDiagCtxt) - #136452 (Miri subtree update) r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_codegen_llvm/src')
| -rw-r--r-- | compiler/rustc_codegen_llvm/src/consts.rs | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/compiler/rustc_codegen_llvm/src/consts.rs b/compiler/rustc_codegen_llvm/src/consts.rs index 771ebf2057f..c6855dd42e5 100644 --- a/compiler/rustc_codegen_llvm/src/consts.rs +++ b/compiler/rustc_codegen_llvm/src/consts.rs @@ -420,8 +420,14 @@ impl<'ll> CodegenCx<'ll, '_> { let g = if val_llty == llty { g } else { - // If we created the global with the wrong type, - // correct the type. + // codegen_static_initializer creates the global value just from the + // `Allocation` data by generating one big struct value that is just + // all the bytes and pointers after each other. This will almost never + // match the type that the static was declared with. Unfortunately + // we can't just LLVMConstBitCast our way out of it because that has very + // specific rules on what can be cast. So instead of adding a new way to + // generate static initializers that match the static's type, we picked + // the easier option and retroactively change the type of the static item itself. let name = llvm::get_value_name(g).to_vec(); llvm::set_value_name(g, b""); |
