about summary refs log tree commit diff
path: root/src
AgeCommit message (Collapse)AuthorLines
2021-07-29[backtraces]: look for the `begin` symbol only after seeing `end`Wesley Wiser-1/+12
On `x86_64-pc-windows-msvc`, we often get backtraces which look like this: ``` 10: 0x7ff77e0e9be5 - std::panicking::rust_panic_with_hook 11: 0x7ff77e0e11b4 - std::sys_common::backtrace::__rust_begin_short_backtrace::h5769736bdb11136c 12: 0x7ff77e0e116f - std::sys_common::backtrace::__rust_end_short_backtrace::h61c7ecb1b55338ae 13: 0x7ff77e0f89dd - std::panicking::begin_panic::h8e60ef9f82a41805 14: 0x7ff77e0e108c - d 15: 0x7ff77e0e1069 - c 16: 0x7ff77e0e1059 - b 17: 0x7ff77e0e1049 - a 18: 0x7ff77e0e1039 - core::ptr::drop_in_place<std::rt::lang_start<()>::{{closure}}>::h1bfcd14d5e15ba81 19: 0x7ff77e0e1186 - std::sys_common::backtrace::__rust_begin_short_backtrace::h5769736bdb11136c 20: 0x7ff77e0e100c - std::rt::lang_start::{{closure}}::ha054184bbf9921e3 ``` Notice that `__rust_begin_short_backtrace` appears on frame 11 before `__rust_end_short_backtrace` on frame 12. This is because in typical release binaries without debug symbols, dbghelp.dll, which we use to walk and symbolize the stack, does not know where CGU internal functions start or end and so the closure invoked by `__rust_end_short_backtrace` is incorrectly described as `__rust_begin_short_backtrace` because it happens to be near that symbol. While that can obviously change, this has been happening quite consistently since #75048. Since this is a very small change to the std and the change makes sense by itself, I think this is worth doing. This doesn't completely resolve the situation for release binaries on Windows, since without debug symbols, the stack printed can still show incorrect symbol names (this is why the test uses `#[no_mangle]`) but it does slightly improve the situation in that you see the same backtrace you would see with `RUST_BACKTRACE=full` or in a debugger (without the uninteresting bits at the top and bottom).
2021-07-29Add regression testWesley Wiser-0/+47
2021-07-28Auto merge of #86251 - Smittyvb:thir-tree-again, r=oli-obkbors-0/+59
Support -Z unpretty=thir-tree again Currently `-Z unpretty=thir-tree` is broken after some THIR refactorings. This re-implements it, making it easier to debug THIR-related issues. We have to do analyzes before getting the THIR, since trying to create THIR from invalid HIR can ICE. But doing those analyzes requires the THIR to be built and stolen. We work around this by creating a separate query to construct the THIR tree string representation. Closes https://github.com/rust-lang/project-thir-unsafeck/issues/8, fixes #85552.
2021-07-28Auto merge of #86735 - jhpratt:rfc-3107, r=petrochenkovbors-42/+267
Implement RFC 3107: `#[derive(Default)]` on enums with a `#[default]` attribute This PR implements RFC 3107, which permits `#[derive(Default)]` on enums where a unit variant has a `#[default]` attribute. See comments for current status.
2021-07-27Update testsJacob Pratt-454/+126
2021-07-27Prohibit `#[default]` in invalid placesJacob Pratt-26/+94
2021-07-27Permit deriving default on enums with `#[default]`Jacob Pratt-42/+199
2021-07-27Auto merge of #83484 - JulianKnodt:infer, r=oli-obk,lcnrbors-29/+207
Add hir::GenericArg::Infer In order to extend inference to consts, make an Infer type on hir::GenericArg.
2021-07-27Rollup merge of #87503 - ehuss:update-books, r=ehussYuki Okushi-0/+0
Update books ## nomicon 1 commits in 7a13537f96af4b9b8e3ea296d6e5c3c7ab72ce9f..f51734eb5566c826b471977747ea3d7d6915bbe9 2021-07-05 23:34:47 -0400 to 2021-07-23 18:24:35 +0900 - Add cloning example for dot operator behaviour (rust-lang/nomicon#292) ## reference 3 commits in 82d75cf423e4a7824fb36e73ccb18519d6900610..3b7be075af5d6e402a18efff672a8a265b4596fd 2021-07-15 06:49:08 -0700 to 2021-07-26 13:20:11 -0700 - Fix typos + grammar (rust-lang/reference#1037) - Expand on Unicode identifiers. (rust-lang/reference#1022) - Remove incorrect apostrophe (rust-lang/reference#1076) ## book 17 commits in eac55314210519238652f12b30fec9daea61f7fe..a07036f864b37896b31eb996cd7aedb489f69a1f 2021-07-19 11:08:01 -0400 to 2021-07-26 20:19:46 -0400 - Set expectations a bit more realistically - Snapshot of chapter 4 for nostarch - A few small wording tweaks in ch 4 - Clarify that it's not stack/heap exactly that matters for copy/non copy, fixes rust-lang/book#2799 - Clarify a detail around move. Fixes rust-lang/book#2413. - Clarify places that changed because of NLL. Fixes rust-lang/book#1939. - nostarch ch3 - Small edits to chapter 3 - (rust-lang/book#2797) - Update ch03-03-how-functions-work.md: Pervasive -&gt; Prevalent. (rust-lang/book#2796) - Address loop labels and continue. Fixes rust-lang/book#1392. - Clarify behavior of integer division. Fixes rust-lang/book#2248. - Demonstrate how scope interacts with shadowing - Add another cross-reference to the new unit type introduction - Introduce the unit type with tuples. Fixes rust-lang/book#1933. - Reword sentence to not have numbers separated only by a comma - Link directly to other installation page. Fixes rust-lang/book#1609 ## rust-by-example 1 commits in 1db6bb483cc87ad3b424d9aba764fe622960a1be..0dc9cd4e89f00cb5230f120e1a083916386e422b 2021-07-15 06:17:42 -0300 to 2021-07-23 09:14:27 -0300 - Grammatical mistake: Comparison as ... as the (rust-lang/rust-by-example#1453) ## rustc-dev-guide 2 commits in 93422c21baca585dc88357ec886a48f6ddc7d665..09343d6f921d2a07c66f8c41ec3d65bf1fa52556 2021-07-13 12:45:58 -0400 to 2021-07-26 00:37:28 +0200 - Fix typo in building/bootstrapping.md (rust-lang/rustc-dev-guide#1175) - Link directly to stabilization report comments (rust-lang/rustc-dev-guide#1173) ## edition-guide 4 commits in af696ce8ea526445590ae0ca66a8128d2a95a69a..3710b0cae783d0bcd2b42452a63b081473f5970a 2021-07-20 11:38:03 -0400 to 2021-07-26 11:34:46 -0700 - Add more consistent headings and add a migration section to reserving-syntax (rust-lang/edition-guide#263) - reserving-syntax.md: Expand and add detail (rust-lang/edition-guide#249) - Fix typo in or-patterns section (rust-lang/edition-guide#262) - Fix typo (rust-lang/edition-guide#261)
2021-07-27Rollup merge of #87502 - ehuss:update-cargo, r=ehussYuki Okushi-0/+0
Update cargo 8 commits in cebef2951ee69617852844894164b54ed478a7da..d21c22870e58499d6c31f1bef3bf1255eb021666 2021-07-22 13:01:52 +0000 to 2021-07-26 20:23:21 +0000 - Fix version string. (rust-lang/cargo#9727) - Allow publishing from workspace root. (rust-lang/cargo#9559) - Better msg for wrong position (rust-lang/cargo#9723) - Stabilize the rustc-link-arg option (rust-lang/cargo#9557) - Warning when using features in replace (rust-lang/cargo#9681) - Refactor if let chains to matches! macro (rust-lang/cargo#9721) - Weather is not nice today.. (rust-lang/cargo#9720) - Update should_use_metadata function (rust-lang/cargo#9653)
2021-07-27Rollup merge of #87497 - midgleyc:long-E0544, r=GuillaumeGomezYuki Okushi-1/+1
Add long explanation for E0544. Helps with #61137
2021-07-27Rollup merge of #86764 - estebank:issue-86756, r=pnkfelixYuki Okushi-0/+58
Avoid ICE on type error recovery Fix #86756
2021-07-27Rollup merge of #86450 - tmiasko:move-size-limit, r=pnkfelixYuki Okushi-5/+55
Add flag to configure `large_assignments` lint The `large_assignments` lints detects moves over specified limit. The limit is configured through `move_size_limit = "N"` attribute placed at the root of a crate. When attribute is absent, the lint is disabled. Make it possible to enable the lint without making any changes to the source code, through a new flag `-Zmove-size-limit=N`. For example, to detect moves exceeding 1023 bytes in a cargo crate, including all dependencies one could use: ``` $ env RUSTFLAGS=-Zmove-size-limit=1024 cargo build -vv ``` Lint tracking issue #83518.
2021-07-27Auto merge of #85305 - MarcusDunn:master, r=pnkfelixbors-278/+219
Stabilize bindings_after_at attempting to stabilze bindings_after_at [#65490](https://github.com/rust-lang/rust/issues/65490), im pretty new to the whole thing so any pointers are greatly appreciated.
2021-07-26Update booksEric Huss-0/+0
2021-07-26Update cargoEric Huss-0/+0
2021-07-27Auto merge of #83491 - jyn514:remove-pretty, r=pnkfelixbors-7/+6
Remove unstable `--pretty` flag It doesn't do anything `--unpretty` doesn't, and due to a bug, also didn't show up in `--help`. I don't think there's any reason to keep it around, I haven't seen anyone using it. Closes https://github.com/rust-lang/rust/issues/36473.
2021-07-26Add long explanation for E0544.Chris Midgley-1/+1
2021-07-26Auto merge of #87480 - GuillaumeGomez:rollup-3ly8t5d, r=GuillaumeGomezbors-15/+99
Rollup of 8 pull requests Successful merges: - #87436 (Suggest `;` on parse error where applicable) - #87444 (Flatten nested `format!` calls) - #87447 (Miri: santiy check that null pointer can never have an AllocId) - #87457 (freebsd remove compiler workaround.) - #87458 (Fix help message for modification to &T created by &{t}) - #87464 (Remove unnecessary `structhead` parameter from `render_union`) - #87473 (Notify the Rust 2021 edition working group in zulip of edition bugs) - #87474 (Add missing whitespace after attribute in HTML template) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
2021-07-26Actually infer args in visitorskadmin-59/+171
2021-07-26Rollup merge of #87474 - GuillaumeGomez:missing-whitespace-after-attr, ↵Guillaume Gomez-1/+1
r=notriddle Add missing whitespace after attribute in HTML template Firefox (even though it worked) highlights it as red when you look at the source code because there is a missing whitespace. r? `@notriddle`
2021-07-26Rollup merge of #87464 - camelid:rm-union-structhead, r=jyn514Guillaume Gomez-4/+2
Remove unnecessary `structhead` parameter from `render_union` `structhead` is used for `render_struct` so that the logic for rendering structs can be shared between struct variants and struct items. However, `render_union` is not used anywhere except for rendering union items, so its `structhead` parameter is unnecessary.
2021-07-26Rollup merge of #87458 - ibraheemdev:help-msg-block-borrow, r=oli-obkGuillaume Gomez-1/+33
Fix help message for modification to &T created by &{t} Previous: ```rust error[E0594]: cannot assign to `*x` which is behind a `&` reference --> src/main.rs:3:5 | 2 | let x: &usize = &mut{0}; | ------- help: consider changing this to be a mutable reference: `&mut mut{0}` 3 | *x = 1; | ^^^^^^ `x` is a `&` reference, so the data it refers to cannot be written ```
2021-07-26Rollup merge of #87444 - camelid:flatten-nested-format, r=jyn514Guillaume Gomez-2/+2
Flatten nested `format!` calls
2021-07-26Rollup merge of #87436 - ebobrow:suggest-semicolon, r=oli-obkGuillaume Gomez-7/+61
Suggest `;` on parse error where applicable fixes #87197
2021-07-26Add missing whitespace after attribute in HTML templateGuillaume Gomez-1/+1
2021-07-262229: Don't capture preicese paths on top of a unionAman Arora-0/+90
- Accessing fields of a union require unsafe block - As part of 2229 we don't allow precision where we need an unsafe block to capture. Fixes: #87378 r? @nikomatsakis
2021-07-25Remove unnecessary `structhead` parameter from `render_union`Noah Lev-4/+2
`structhead` is used for `render_struct` so that the logic for rendering structs can be shared between struct variants and struct items. However, `render_union` is not used anywhere except for rendering union items, so its `structhead` parameter is unnecessary.
2021-07-25Auto merge of #87390 - notriddle:notriddle/rustdoc-headers-patch, ↵bors-218/+231
r=GuillaumeGomez Rustdoc accessibility: use real headers for doc items Part of #87059 Partially reverts #84703 Preview at: https://notriddle.com/notriddle-rustdoc-test/real-headers/std/index.html
2021-07-25Rustdoc accessibility: use real headers for doc itemsbors-218/+231
Part of #87059 Partially reverts #84703 Preview at: https://notriddle.com/notriddle-rustdoc-test/real-headers/std/index.html
2021-07-25Auto merge of #86595 - a1phyr:allocator_api_for_vecdeque, r=Amanieubors-2/+2
Add support for custom allocator in `VecDeque` This follows the [roadmap](https://github.com/rust-lang/wg-allocators/issues/7) of the allocator WG to add custom allocators to collections. `@rustbot` modify labels: +A-allocators +T-libs
2021-07-25Fix failing testBenoît du Garreau-2/+2
2021-07-25fix help message for modification to &T created by &{t}ibraheemdev-1/+33
2021-07-25Auto merge of #86438 - FabianWolff:issue-83693, r=jackh726bors-0/+87
Fix the ICE described in #83693 This pull request fixes #83693 and fixes #84768.
2021-07-25Auto merge of #85646 - Moxinilian:separate-const-switch, r=cjgillotbors-0/+710
MIR opt: separate constant predecessors of a switch For each block S ending with a switch, this pass copies S for each of S's predecessors that seem to assign the value being switched over as a const. This is done using a somewhat simple heuristic to determine what seems to be a const transitively. More precisely, this is what the pass does: - find a block that ends in a switch - track if there is an unique place set before the current basic block that determines the result of the switch (this is the part that resolves switching over discriminants) - if there is, iterate over the parents that have a reasonable terminator and find if the found determining place is likely to be (transitively) set from a const within that parent block - if so, add the corresponding edge to a vector of edges to duplicate - once this is done, iterate over the found edges: copy the target block and replace the reference to the target block in the origin block with the new block This pass is not optimal and could probably duplicate in more cases, but the intention was mostly to address cases like in #85133 or #85365, to avoid creating new enums that get destroyed immediately afterwards (notably making the new try v2 `?` desugar zero-cost). A benefit of this pass working the way it does is that it is easy to ensure its correctness: the worst that can happen is for it to needlessly copy a basic block, which is likely to be destroyed by cleanup passes afterwards. The complex parts where aliasing matters are only heuristics and the hard work is left to further passes like ConstProp. # LLVM blocker Unfortunately, I believe it would be unwise to enable this optimization by default for now. Indeed, currently switch lowering passes like SimplifyCFG in LLVM lose the information on the set of possible variant values, which means it tends to actually generate worse code with this optimization enabled. A fix would have to be done in LLVM itself. This is something I also want to look into. I have opened [a bug report at the LLVM bug tracker](https://bugs.llvm.org/show_bug.cgi?id=50455). When this is done, I hope we can enable this pass by default. It should be fairly fast and I think it is beneficial in many cases. Notably, it should be a sound alternative to simplify-arm-identity. By the way, ConstProp only seems to pick up the optimization in functions that are not generic. This is however most likely an issue in ConstProp that I will look into afterwards. This is my first contribution to rustc, and I would like to thank everyone on the Zulip mir-opt chat for the help and support, and especially `@scottmcm` for the guidance.
2021-07-25Auto merge of #83723 - cjgillot:ownernode, r=petrochenkovbors-170/+170
Store all HIR owners in the same container This replaces the previous storage in a BTreeMap for each of Item/ImplItem/TraitItem/ForeignItem. This should allow for a more compact storage. Based on https://github.com/rust-lang/rust/pull/83114
2021-07-25Bless tests.Camille GILLOT-161/+161
2021-07-25Introduce OwnerNode::Crate.Camille GILLOT-8/+8
2021-07-25Merge the BTreeMap in hir::Crate.Camille GILLOT-1/+1
2021-07-25Add inferred args to typeckkadmin-13/+87
2021-07-25Add generic arg inferkadmin-37/+29
2021-07-25Auto merge of #87381 - Aaron1011:note-semi-trailing-macro, r=petrochenkovbors-0/+2
Display an extra note for trailing semicolon lint with trailing macro Currently, we parse macros at the end of a block (e.g. `fn foo() { my_macro!() }`) as expressions, rather than statements. This means that a macro invoked in this position cannot expand to items or semicolon-terminated expressions. In the future, we might want to start parsing these kinds of macros as statements. This would make expansion more 'token-based' (i.e. macro expansion behaves (almost) as if you just textually replaced the macro invocation with its output). However, this is a breaking change (see PR #78991), so it will require further discussion. Since the current behavior will not be changing any time soon, we need to address the interaction with the `SEMICOLON_IN_EXPRESSIONS_FROM_MACROS` lint. Since we are parsing the result of macro expansion as an expression, we will emit a lint if there's a trailing semicolon in the macro output. However, this results in a somewhat confusing message for users, since it visually looks like there should be no problem with having a semicolon at the end of a block (e.g. `fn foo() { my_macro!() }` => `fn foo() { produced_expr; }`) To help reduce confusion, this commit adds a note explaining that the macro is being interpreted as an expression. Additionally, we suggest adding a semicolon after the macro *invocation* - this will cause us to parse the macro call as a statement. We do *not* use a structured suggestion for this, since the user may actually want to remove the semicolon from the macro definition (allowing the block to evaluate to the expression produced by the macro).
2021-07-25Auto merge of #87331 - camelid:summary-escaping, r=GuillaumeGomezbors-4/+13
Escape item search summaries I noticed that `Pin::new()`'s search summary looked off, and I realized that the reason is that it has inline code containing `Pin<P>`, which is not escaped and thus renders as a paragraph tag!
2021-07-24Flatten nested `format!` callsNoah Lev-2/+2
2021-07-24Escape item search summariesNoah Lev-4/+13
I noticed that `Pin::new()`'s search summary looked off, and I realized that the reason is that it has inline code containing `Pin<P>`, which is not escaped and thus renders as a paragraph tag!
2021-07-24Add test for -Z unpretty=thir-treeSmitty-0/+59
2021-07-24Auto merge of #86580 - BoxyUwU:cgd-subst-ice, r=nikomatsakisbors-0/+96
dont provide fwd declared params to cg defaults Fixes #83938 ```rust #![feature(const_evaluatable_checked, const_generics, const_generics_defaults)] #![allow(incomplete_features)] pub struct Bar<const N: usize, const M: usize = { N + 1 }>; pub fn foo<const N1: usize>() -> Bar<N1> { loop {} } fn main() {} ``` This PR makes this code no longer ICE, it was ICE'ing previously because when building substs for `Bar<N1>` we would subst the anon ct: `ConstKind::Unevaluated({N + 1}, substs: [N, M])` with substs of `[N1]`. the anon const has forward declared params supplied though so we end up trying to substitute the provided `M` param which causes the ICE. This PR doesn't handle the predicates of the const so ```rust trait Foo<const N: usize> { const Assoc: usize; } pub struct Bar<const N: usize = { <()>::Assoc }> where (): Foo<N>; ``` Resolves to `<() as Foo<N>>::Assoc` which can allow for using fwd declared params indirectly. ```rust trait Foo<const N: usize> {} struct Bar<const N: usize = { 2 + 3 }> where (): Foo<N>; ``` This code also ICEs under this PR because instantiating the default's predicates causes an ICE as predicates_of contains predicates with fwd declared params PR was briefly discussed [in this zulip thread](https://rust-lang.zulipchat.com/#narrow/stream/260443-project-const-generics/topic/evil.20preds.20in.20param.20env.20.2386580)
2021-07-24fix code to suggest `;` on parse errorElliot Bobrow-7/+61
2021-07-24Rollup merge of #87403 - LeSeulArtichaut:assign-dropping-union, r=oli-obkManish Goregaokar-3/+19
Implement `AssignToDroppingUnionField` in THIR unsafeck r? ``@oli-obk`` cc rust-lang/project-thir-unsafeck#7
2021-07-24Rollup merge of #87370 - pkubaj:master, r=oli-obkManish Goregaokar-0/+10
Add support for powerpc-unknown-freebsd - A tier 3 target must have a designated developer or developers (the "target maintainers") on record to be CCed when issues arise regarding the target. (The mechanism to track and CC such developers may evolve over time.) For all Rust targets on FreeBSD, it's rust@FreeBSD.org. - Targets must use naming consistent with any existing targets; for instance, a target for the same CPU or OS as an existing Rust target should use the same name for that CPU or OS. Targets should normally use the same names and naming conventions as used elsewhere in the broader ecosystem beyond Rust (such as in other toolchains), unless they have a very good reason to diverge. Changing the name of a target can be highly disruptive, especially once the target reaches a higher tier, so getting the name right is important even for a tier 3 target. Done. - Target names should not introduce undue confusion or ambiguity unless absolutely necessary to maintain ecosystem compatibility. For example, if the name of the target makes people extremely likely to form incorrect beliefs about what it targets, the name should be changed or augmented to disambiguate it. Done - Tier 3 targets may have unusual requirements to build or use, but must not create legal issues or impose onerous legal terms for the Rust project or for Rust developers or users. Done. - The target must not introduce license incompatibilities. Done. - Anything added to the Rust repository must be under the standard Rust license (MIT OR Apache-2.0). Fine with me. - The target must not cause the Rust tools or libraries built for any other host (even when supporting cross-compilation to the target) to depend on any new dependency less permissive than the Rust licensing policy. This applies whether the dependency is a Rust crate that would require adding new license exceptions (as specified by the tidy tool in the rust-lang/rust repository), or whether the dependency is a native library or binary. In other words, the introduction of the target must not cause a user installing or running a version of Rust or the Rust tools to be subject to any new license requirements. Done. - If the target supports building host tools (such as rustc or cargo), those host tools must not depend on proprietary (non-FOSS) libraries, other than ordinary runtime libraries supplied by the platform and commonly used by other binaries built for the target. For instance, rustc built for the target may depend on a common proprietary C runtime library or console output library, but must not depend on a proprietary code generation library or code optimization library. Rust's license permits such combinations, but the Rust project has no interest in maintaining such combinations within the scope of Rust itself, even at tier 3. Done. - Targets should not require proprietary (non-FOSS) components to link a functional binary or library. Done. - "onerous" here is an intentionally subjective term. At a minimum, "onerous" legal/licensing terms include but are not limited to: non-disclosure requirements, non-compete requirements, contributor license agreements (CLAs) or equivalent, "non-commercial"/"research-only"/etc terms, requirements conditional on the employer or employment of any particular Rust developers, revocable terms, any requirements that create liability for the Rust project or its developers or users, or any requirements that adversely affect the livelihood or prospects of the Rust project or its developers or users. Fine with me. - Neither this policy nor any decisions made regarding targets shall create any binding agreement or estoppel by any party. If any member of an approving Rust team serves as one of the maintainers of a target, or has any legal or employment requirement (explicit or implicit) that might affect their decisions regarding a target, they must recuse themselves from any approval decisions regarding the target's tier status, though they may otherwise participate in discussions. Ok. - This requirement does not prevent part or all of this policy from being cited in an explicit contract or work agreement (e.g. to implement or maintain support for a target). This requirement exists to ensure that a developer or team responsible for reviewing and approving a target does not face any legal threats or obligations that would prevent them from freely exercising their judgment in such approval, even if such judgment involves subjective matters or goes beyond the letter of these requirements. Ok. - Tier 3 targets should attempt to implement as much of the standard libraries as possible and appropriate (core for most targets, alloc for targets that can support dynamic memory allocation, std for targets with an operating system or equivalent layer of system-provided functionality), but may leave some code unimplemented (either unavailable or stubbed out as appropriate), whether because the target makes it impossible to implement or challenging to implement. The authors of pull requests are not obligated to avoid calling any portions of the standard library on the basis of a tier 3 target not implementing those portions. std is implemented. - The target must provide documentation for the Rust community explaining how to build for the target, using cross-compilation if possible. If the target supports running tests (even if they do not pass), the documentation must explain how to run tests for the target, using emulation if possible or dedicated hardware if necessary. Hm, building is possible the same way as other Rust on FreeBSD targets. - Tier 3 targets must not impose burden on the authors of pull requests, or other developers in the community, to maintain the target. In particular, do not post comments (automated or manual) on a PR that derail or suggest a block on the PR based on a tier 3 target. Do not send automated messages or notifications (via any medium, including via `@)` to a PR author or others involved with a PR regarding a tier 3 target, unless they have opted into such messages. Ok. - Backlinks such as those generated by the issue/PR tracker when linking to an issue or PR are not considered a violation of this policy, within reason. However, such messages (even on a separate repository) must not generate notifications to anyone involved with a PR who has not requested such notifications. Ok. - Patches adding or updating tier 3 targets must not break any existing tier 2 or tier 1 target, and must not knowingly break another tier 3 target without approval of either the compiler team or the maintainers of the other tier 3 target. Ok. - In particular, this may come up when working on closely related targets, such as variations of the same architecture with different features. Avoid introducing unconditional uses of features that another variation of the target may not have; use conditional compilation or runtime detection, as appropriate, to let each target run code supported by that target. Ok.