You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
We have an amazing amount of information that we're not passing along to LLVM. We should be attaching metadata to pointers and using it to respond to alias analysis queries. A good start would be to figure out how to make a shim responding MayAlias to all queries.
The NoAlias response may be used when there is never an immediate dependence between any memory reference based on one pointer and any memory reference based the other. The most obvious example is when the two pointers point to non-overlapping memory ranges. Another is when the two pointers are only ever used for reading memory. Another is when the memory is freed and reallocated between accesses through one pointer and accesses through the other — in this case, there is a dependence, but it’s mediated by the free and reallocation.
For Const objects, assuming no incorrect unsafe blocks, we can respond NoAlias for every &mut, & and ~ pointer because they either only read memory or are the only handle able to mutate the memory while they exist. We have the potential to beat C/C++ on a lot of benchmarks here...
The text was updated successfully, but these errors were encountered:
This was removed because these could alias with `&const T` or `@mut T`
and those are now gone from the language. There are still aliasing
issues within local scopes, but this is correct for function parameters.
This also removes the no-op `noalias` marker on proc (not a pointer) and
leaves out the mention of #6750 because real type-based alias analysis
is not within the scope of best effort usage of the `noalias` attribute.
Test case:
pub fn foo(x: &mut &mut u32) {
**x = 5;
**x = 5;
}
Before:
define void @_ZN3foo20h0ce94c9671b0150bdaa4v0.0E(i32** nocapture readonly) unnamed_addr #0 {
entry-block:
%1 = load i32** %0, align 8
store i32 5, i32* %1, align 4
%2 = load i32** %0, align 8
store i32 5, i32* %2, align 4
ret void
}
After:
define void @_ZN3foo20h0ce94c9671b0150bdaa4v0.0E(i32** noalias nocapture readonly) unnamed_addr #0 {
entry-block:
%1 = load i32** %0, align 8
store i32 5, i32* %1, align 4
ret void
}
Closes#12436
…krgr
Lintcheck and an options for command line options
Make it possible to add command line options to the clippy invocation of the lintcheck-tool
changelog: none
r? `@matthiaskrgr`
I found that this will be really helpful if we use a separate repository and want to maintain a all-lints-passing list of crates. See my early experimentation here: https://github.com/flip1995/clippy-lintcheck
```
git submodule update --init
cargo run -- --mode=all
```
Will run the lintcheck tool on all the specified crates in `config/` in that repository.
We have an amazing amount of information that we're not passing along to LLVM. We should be attaching metadata to pointers and using it to respond to alias analysis queries. A good start would be to figure out how to make a shim responding
MayAlias
to all queries.For
Const
objects, assuming no incorrectunsafe
blocks, we can respondNoAlias
for every&mut
,&
and~
pointer because they either only read memory or are the only handle able to mutate the memory while they exist. We have the potential to beat C/C++ on a lot of benchmarks here...The text was updated successfully, but these errors were encountered: