diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2024-10-11 15:36:52 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-11 15:36:52 +0200 |
| commit | 33b1264540bade1e9122cfff7c95a7a9e20f5529 (patch) | |
| tree | 45a8fa01a5b35e43751f32ced3548b6b95be66a3 /compiler/rustc_codegen_llvm/src | |
| parent | 103c71686aaa1f1edb92905a8f6dff701dddd70a (diff) | |
| parent | 42c0494499b3ee271bafa68bbfe5eb5176442c4d (diff) | |
| download | rust-33b1264540bade1e9122cfff7c95a7a9e20f5529.tar.gz rust-33b1264540bade1e9122cfff7c95a7a9e20f5529.zip | |
Rollup merge of #131519 - davidlattimore:intrinsics-default-vis, r=Urgau
Use Default visibility for rustc-generated C symbol declarations Non-default visibilities should only be used for definitions, not declarations, otherwise linking can fail. This is based on https://github.com/rust-lang/rust/pull/123994. Issue https://github.com/rust-lang/rust/issues/123427 When I changed `default-hidden-visibility` to `default-visibility` in https://github.com/rust-lang/rust/pull/130005, I updated all places in the code that used `default-hidden-visibility`, replicating the hidden-visibility bug to also happen for protected visibility. Without this change, trying to build rustc with `-Z default-visibility=protected` fails with a link error.
Diffstat (limited to 'compiler/rustc_codegen_llvm/src')
| -rw-r--r-- | compiler/rustc_codegen_llvm/src/declare.rs | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/compiler/rustc_codegen_llvm/src/declare.rs b/compiler/rustc_codegen_llvm/src/declare.rs index 7be44dd51b5..33258cb46fa 100644 --- a/compiler/rustc_codegen_llvm/src/declare.rs +++ b/compiler/rustc_codegen_llvm/src/declare.rs @@ -84,10 +84,9 @@ impl<'ll, 'tcx> CodegenCx<'ll, 'tcx> { unnamed: llvm::UnnamedAddr, fn_type: &'ll Type, ) -> &'ll Value { - // Declare C ABI functions with the visibility used by C by default. - let visibility = Visibility::from_generic(self.tcx.sess.default_visibility()); - - declare_raw_fn(self, name, llvm::CCallConv, unnamed, visibility, fn_type) + // Visibility should always be default for declarations, otherwise the linker may report an + // error. + declare_raw_fn(self, name, llvm::CCallConv, unnamed, Visibility::Default, fn_type) } /// Declare an entry Function |
