rust/compiler
Dylan DPC c1d6d322f4
Rollup merge of #113716 - DianQK:add-no_builtins-to-function, r=pnkfelix
Add the `no-builtins` attribute to functions when `no_builtins` is applied at the crate level.

**When `no_builtins` is applied at the crate level, we should add the `no-builtins` attribute to each function to ensure it takes effect in LTO.**

This is also the reason why no_builtins does not take effect in LTO as mentioned in #35540.

Now, `#![no_builtins]` should be similar to `-fno-builtin` in clang/gcc, see https://clang.godbolt.org/z/z4j6Wsod5.

Next, we should make `#![no_builtins]` participate in LTO again. That makes sense, as LTO also takes into consideration function-level instruction optimizations, such as the MachineOutliner. More importantly, when a user writes a large `#![no_builtins]` crate, they would like this crate to participate in LTO as well.

We should also add a function-level no_builtins attribute to allow users to have more control over it. This is similar to Clang's `__attribute__((no_builtin))` feature, see https://clang.godbolt.org/z/Wod6KK6eq. Before implementing this feature, maybe we should discuss whether to support more fine-grained control, such as `__attribute__((no_builtin("memcpy")))`.

Related discussions:
- #109821
- #35540

Next (a separate pull request?):
- [ ] Revert #35637
- [ ] Add a function-level `no_builtin` attribute?
2023-07-19 22:37:06 +05:30
..
rustc fix link 2023-03-11 10:53:47 -06:00
rustc_abi i686-windows: make requested alignment > 4 special case apply transitively 2023-07-14 17:48:13 -04:00
rustc_apfloat
rustc_arena Extend `unused_must_use` to cover block exprs 2023-06-15 17:59:13 +08:00
rustc_ast Flip cfg's for bootstrap bump 2023-07-12 21:38:55 -04:00
rustc_ast_lowering Re-format let-else per rustfmt update 2023-07-12 21:49:27 -04:00
rustc_ast_passes Lint against misplaced where-clauses on assoc tys in traits 2023-07-11 01:19:11 +02:00
rustc_ast_pretty Syntatically accept `become` expressions 2023-06-19 12:54:34 +00:00
rustc_attr Add infrastructure `#[rustc_confusables]` attribute to allow targeted 2023-07-16 19:22:03 +08:00
rustc_baked_icu_data Regen baked data 2023-05-02 10:45:16 -07:00
rustc_borrowck Rename arg_iter to iter_instantiated 2023-07-17 21:04:12 +00:00
rustc_builtin_macros Add a comparison between match *self and intrinsics::unreachable() 2023-07-16 15:33:29 -07:00
rustc_codegen_cranelift support for mips64r6 as a target_arch value 2023-07-18 18:58:18 +08:00
rustc_codegen_gcc support for mips32r6 as a target_arch value 2023-07-18 18:58:18 +08:00
rustc_codegen_llvm Rollup merge of #113716 - DianQK:add-no_builtins-to-function, r=pnkfelix 2023-07-19 22:37:06 +05:30
rustc_codegen_ssa Rollup merge of #113716 - DianQK:add-no_builtins-to-function, r=pnkfelix 2023-07-19 22:37:06 +05:30
rustc_const_eval Refactor checking function target features during const-eval 2023-07-16 16:07:55 +02:00
rustc_data_structures Introduce ExtentUnord trait for collections that can safely consume UnordItems. 2023-07-14 10:10:15 +02:00
rustc_driver Update rustix 2023-07-03 07:20:51 +00:00
rustc_driver_impl Don't require each rustc_interface tool to opt-in to parallel_rustc support 2023-07-11 22:55:23 -05:00
rustc_error_codes Implement custom diagnostic for ConstParamTy 2023-06-01 18:21:42 +00:00
rustc_error_messages Require TAITs to be mentioned in the signatures of functions that register hidden types for them 2023-07-07 13:13:18 +00:00
rustc_errors Re-format let-else per rustfmt update 2023-07-12 21:49:27 -04:00
rustc_expand Re-format let-else per rustfmt update 2023-07-12 21:49:27 -04:00
rustc_feature Add infrastructure `#[rustc_confusables]` attribute to allow targeted 2023-07-16 19:22:03 +08:00
rustc_fluent_macro Fix diagnostics with errors 2023-05-26 10:44:18 +00:00
rustc_fs_util Add `try_canonicalize` to `rustc_fs_util` and use it over `fs::canonicalize` 2023-03-16 21:50:23 +01:00
rustc_graphviz enable `rust_2018_idioms` for doctests 2023-05-07 00:12:29 +03:00
rustc_hir Re-format let-else per rustfmt update 2023-07-12 21:49:27 -04:00
rustc_hir_analysis Rename arg_iter to iter_instantiated 2023-07-17 21:04:12 +00:00
rustc_hir_pretty `hir`: Add `Become` expression kind 2023-06-26 08:56:32 +00:00
rustc_hir_typeck Relax recursive opaque type check 2023-07-18 15:56:03 +00:00
rustc_incremental Re-format let-else per rustfmt update 2023-07-12 21:49:27 -04:00
rustc_index Re-format let-else per rustfmt update 2023-07-12 21:49:27 -04:00
rustc_infer Rename arg_iter to iter_instantiated 2023-07-17 21:04:12 +00:00
rustc_interface Auto merge of #113606 - jyn514:parallel-compiler-cleanup, r=cjgillot 2023-07-15 22:23:05 +00:00
rustc_lexer Revert the lexing of c_str_literals 2023-07-05 13:11:17 +02:00
rustc_lint Rollup merge of #113832 - WaffleLapkin:track_lint_caller, r=compiler-errors 2023-07-18 19:06:04 +02:00
rustc_lint_defs Fix removal span calculation of unused_qualifications suggestion 2023-07-18 09:52:08 +08:00
rustc_llvm Auto merge of #113714 - Kobzol:ci-cmake, r=nikic 2023-07-17 15:46:43 +00:00
rustc_log Downgrade tracing and syn 2023-07-02 21:02:31 +02:00
rustc_macros Re-format let-else per rustfmt update 2023-07-12 21:49:27 -04:00
rustc_metadata Auto merge of #113562 - saethlin:larger-incr-comp-offset, r=nnethercote 2023-07-17 04:45:10 +00:00
rustc_middle Rollup merge of #113716 - DianQK:add-no_builtins-to-function, r=pnkfelix 2023-07-19 22:37:06 +05:30
rustc_mir_build Implement "items do not inherit unsafety" for THIR unsafeck 2023-07-15 11:59:38 -04:00
rustc_mir_dataflow refactor(rustc_middle): Substs -> GenericArg 2023-07-14 13:27:35 +01:00
rustc_mir_transform Auto merge of #109025 - cjgillot:refprop-dbg, r=JakobDegen 2023-07-14 17:32:59 +00:00
rustc_monomorphize Change the primary CGU merging algorithm. 2023-07-19 07:23:11 +10:00
rustc_parse Re-format let-else per rustfmt update 2023-07-12 21:49:27 -04:00
rustc_parse_format Fix typos in compiler 2023-04-10 22:02:52 +02:00
rustc_passes Add infrastructure `#[rustc_confusables]` attribute to allow targeted 2023-07-16 19:22:03 +08:00
rustc_plugin_impl Add `rustc_fluent_macro` to decouple fluent from `rustc_macros` 2023-04-18 18:56:22 +00:00
rustc_privacy refactor(rustc_middle): Substs -> GenericArg 2023-07-14 13:27:35 +01:00
rustc_query_impl Avoid calling queries during query stack printing 2023-06-27 16:12:07 +02:00
rustc_query_system Show which type was not specialized on query cycle misuse 2023-07-05 07:30:28 +00:00
rustc_resolve Fix removal span calculation of unused_qualifications suggestion 2023-07-18 09:52:08 +08:00
rustc_serialize Upgrade to indexmap 2.0.0 2023-07-03 13:51:54 -07:00
rustc_session Add `#[track_caller]` to lint related diagnostic functions 2023-07-18 15:48:07 +00:00
rustc_smir conversions to smir RawPtr and Ref 2023-07-17 21:08:49 -04:00
rustc_span Add infrastructure `#[rustc_confusables]` attribute to allow targeted 2023-07-16 19:22:03 +08:00
rustc_symbol_mangling refactor(rustc_middle): Substs -> GenericArg 2023-07-14 13:27:35 +01:00
rustc_target support for mips32r6 as a target_arch value 2023-07-18 18:58:18 +08:00
rustc_trait_selection Auto merge of #113690 - aliemjay:opaque-defined-by-trait, r=compiler-errors 2023-07-19 05:40:58 +00:00
rustc_traits refactor(rustc_middle): Substs -> GenericArg 2023-07-14 13:27:35 +01:00
rustc_transmute Auto merge of #113677 - bryangarza:unevaluated-const-ice_issue-110892, r=davidtwco 2023-07-18 09:07:32 +00:00
rustc_ty_utils Rollup merge of #113824 - lcnr:exhaustive-match, r=wesleywiser 2023-07-18 19:06:03 +02:00
rustc_type_ir refactor(rustc_middle): Substs -> GenericArg 2023-07-14 13:27:35 +01:00