Emit retags in codegen to support BorrowSanitizer (part 4)#158100
Emit retags in codegen to support BorrowSanitizer (part 4)#158100icmccorm wants to merge 2 commits into
Conversation
This comment has been minimized.
This comment has been minimized.
| // If the variant contains another variant, then the current block | ||
| // will be different than the one that we created above. We want this | ||
| // block to jump to the terminator block. |
There was a problem hiding this comment.
I don't think this is quite right. For example:
#![crate_type = "lib"]
pub enum Inner {
A(&'static u8),
B(&'static u16),
}
pub enum Outer {
P(&'static u32),
Q(Inner),
}
#[inline(never)]
pub fn demo(_x: Outer) {}produces a block for the Outer::Q case that recurses into the Inner, but that block has no predecessors.
There was a problem hiding this comment.
Good catch! This should be fixed now with 19ba1b0.
|
@bors squash |
|
🔑 The |
|
Oof. @icmccorm Can you combine the commits into perhaps two commits, or check the box that lets maintainers push changes? Then r=me |
19ba1b0 to
c268765
Compare
|
@saethlin I squashed this into two commits. Since our fork is under an org, GitHub doesn't support letting maintainers make changes, unless I add each individual maintainer to the org. I can add you, if you like. Otherwise, I can just do this from a personal fork in the future. |
That's very unfortunate. Don't bother changing your workflow around this limitation, I'll just be ready for it in the future :p |
|
@bors r+ |
…-4, r=saethlin Emit retags in codegen to support BorrowSanitizer (part 4) Tracking issue: rust-lang#154760 [Zulip Thread](https://rust-lang.zulipchat.com/#narrow/channel/131828-t-compiler/topic/Staging.20for.20emitting.20retags.20in.20codegen/with/593004012) This is one of several PRs that add experimental support for emitting retags as function calls in codegen. This PR emits our retag intrinsics based on the structure of a `RetagPlan`. The feature works end-to-end now! But, it has two limitations: * We do not track interior mutable or pinned ranges precisely. This will come in the next PR, which should be the last one that we need to complete this feature (excluding documentation and compile tests). * We recurse into `repr(simd)` types when building a `RetagPlan`, but we do not emit retags for their fields. We would need `BuilderMethods::insert_element`, which isn't available. I'm not sure what the best workaround would be for this. Related: rust-lang#157825, rust-lang#156210, rust-lang#156208 Cc: @RalfJung r? @saethlin
…uwer Rollup of 22 pull requests Successful merges: - #155429 (Support `u128`/`i128` c-variadic arguments) - #158100 (Emit retags in codegen to support BorrowSanitizer (part 4)) - #158494 (Improve E0277 diagnostics for conditionally implemented traits) - #158606 (use ProjectionPredicate instead of AliasRelate) - #158627 (Simplify option-iterator flattening in the compiler) - #158658 (Update LLVM submodule) - #158665 (Revert "Remove redundant dyn-compatibility check.") - #158021 (Remove old MinGW workaround) - #158473 (Add `riscv32imfc-unknown-none-elf` bare-metal target) - #158549 (process::exec: using appropriate exit code on vxworks.) - #158585 (Improve diagnostic for too many super keywords) - #158637 (hir_ty_lowering: avoid self type lookup for inherent aliases) - #158651 (ptr doc: reduce use of unsafe block to where needed) - #158669 (Remove `src/tools/test-float-parse/Cargo.lock`) - #158674 (library: Polish transmute's `split_at_stdlib` example) - #158677 (Add extra splat tests) - #158680 (Avoid ICE for `NonZero<char>` in improper_ctypes) - #158681 (Remove unnecessary `Hash` derives from MIR types) - #158682 (Avoid delayed bug for disabled on_type_error arguments) - #158684 (Add missing generic test coverage for ```#[splat]```) - #158687 (Streamline `MacEager`) - #158688 (Cleanup attribute docs and add links to other mentioned attributes)
Tracking issue: #154760
Zulip Thread
This is one of several PRs that add experimental support for emitting retags as function calls in codegen.
This PR emits our retag intrinsics based on the structure of a
RetagPlan. The feature works end-to-end now! But, it has two limitations:We do not track interior mutable or pinned ranges precisely. This will come in the next PR, which should be the last one that we need to complete this feature (excluding documentation and compile tests).
We recurse into
repr(simd)types when building aRetagPlan, but we do not emit retags for their fields. We would needBuilderMethods::insert_element, which isn't available. I'm not sure what the best workaround would be for this.Related: #157825, #156210, #156208
Cc: @RalfJung
r? @saethlin