diff options
| author | bors <bors@rust-lang.org> | 2025-09-04 02:28:20 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2025-09-04 02:28:20 +0000 |
| commit | 033c0a4742794f5608b19eb78458726596f8ec18 (patch) | |
| tree | a2b11085fece36214506d9a7e8359332d921be11 /compiler/rustc_codegen_llvm/src/builder.rs | |
| parent | 9385c64c95d971329e62917adc4349c8ccdbafe0 (diff) | |
| parent | 11ea57363b37577103181cd5910a63105651335a (diff) | |
| download | rust-033c0a4742794f5608b19eb78458726596f8ec18.tar.gz rust-033c0a4742794f5608b19eb78458726596f8ec18.zip | |
Auto merge of #146185 - Zalathar:rollup-n14lyv6, r=Zalathar
Rollup of 24 pull requests Successful merges: - rust-lang/rust#140459 (Add `read_buf` equivalents for positioned reads) - rust-lang/rust#143725 (core: add Peekable::next_if_map) - rust-lang/rust#145209 (Stabilize `path_add_extension`) - rust-lang/rust#145342 (fix drop scope for `super let` bindings within `if let`) - rust-lang/rust#145750 (raw_vec.rs: Remove superfluous fn alloc_guard) - rust-lang/rust#145827 (On unused binding or binding not present in all patterns, suggest potential typo of unit struct/variant or const) - rust-lang/rust#145932 (Allow `inline(always)` with a target feature behind a unstable feature `target_feature_inline_always`.) - rust-lang/rust#145962 (Ensure we emit an allocator shim when only some crate types need one) - rust-lang/rust#145963 (Add LSX accelerated implementation for source file analysis) - rust-lang/rust#146054 (add `#[must_use]` to `array::repeat`) - rust-lang/rust#146090 (Derive `PartialEq` for `InvisibleOrigin`) - rust-lang/rust#146112 (don't uppercase error messages) - rust-lang/rust#146120 (Correct typo in `rustc_errors` comment) - rust-lang/rust#146124 (Test `rustc-dev` in `distcheck`) - rust-lang/rust#146127 (Rename `ToolRustc` to `ToolRustcPrivate`) - rust-lang/rust#146131 (rustdoc-search: add test case for indexing every item type) - rust-lang/rust#146134 (llvm: nvptx: Layout update to match LLVM) - rust-lang/rust#146136 (docs(std): add missing closing code block fences in doc comments) - rust-lang/rust#146137 (Disallow frontmatter in `--cfg` and `--check-cfg` arguments) - rust-lang/rust#146140 (compiletest: cygwin follows windows in using PATH for dynamic libraries) - rust-lang/rust#146150 (fix(rustdoc): match rustc `--emit` precedence ) - rust-lang/rust#146155 (Make bootstrap self test parallel) - rust-lang/rust#146161 ([rustdoc] Uncomment code to add scraped rustdoc examples in loaded paths) - rust-lang/rust#146172 (triagebot: configure some pings when certain attributes are used) r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_codegen_llvm/src/builder.rs')
| -rw-r--r-- | compiler/rustc_codegen_llvm/src/builder.rs | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/compiler/rustc_codegen_llvm/src/builder.rs b/compiler/rustc_codegen_llvm/src/builder.rs index 37379586d58..7d0691366e6 100644 --- a/compiler/rustc_codegen_llvm/src/builder.rs +++ b/compiler/rustc_codegen_llvm/src/builder.rs @@ -1392,7 +1392,7 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> { fn call( &mut self, llty: &'ll Type, - fn_attrs: Option<&CodegenFnAttrs>, + fn_call_attrs: Option<&CodegenFnAttrs>, fn_abi: Option<&FnAbi<'tcx, Ty<'tcx>>>, llfn: &'ll Value, args: &[&'ll Value], @@ -1409,10 +1409,10 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> { } // Emit CFI pointer type membership test - self.cfi_type_test(fn_attrs, fn_abi, instance, llfn); + self.cfi_type_test(fn_call_attrs, fn_abi, instance, llfn); // Emit KCFI operand bundle - let kcfi_bundle = self.kcfi_operand_bundle(fn_attrs, fn_abi, instance, llfn); + let kcfi_bundle = self.kcfi_operand_bundle(fn_call_attrs, fn_abi, instance, llfn); if let Some(kcfi_bundle) = kcfi_bundle.as_ref().map(|b| b.as_ref()) { bundles.push(kcfi_bundle); } @@ -1429,6 +1429,29 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> { c"".as_ptr(), ) }; + + if let Some(instance) = instance { + // Attributes on the function definition being called + let fn_defn_attrs = self.cx.tcx.codegen_fn_attrs(instance.def_id()); + if let Some(fn_call_attrs) = fn_call_attrs + && !fn_call_attrs.target_features.is_empty() + // If there is an inline attribute and a target feature that matches + // we will add the attribute to the callsite otherwise we'll omit + // this and not add the attribute to prevent soundness issues. + && let Some(inlining_rule) = attributes::inline_attr(&self.cx, instance) + && self.cx.tcx.is_target_feature_call_safe( + &fn_call_attrs.target_features, + &fn_defn_attrs.target_features, + ) + { + attributes::apply_to_callsite( + call, + llvm::AttributePlace::Function, + &[inlining_rule], + ); + } + } + if let Some(fn_abi) = fn_abi { fn_abi.apply_attrs_callsite(self, call); } |
