-
Notifications
You must be signed in to change notification settings - Fork 12.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Inner statics in generic fns aren't handled correctly. #9186
Comments
Nominating for the well-defined milestone (whether type parameters can appear in statics). |
accepted backwards-compatible |
I think that the generic types etc should not be in scope for the static -- that is, trans et al are doing the right thing, just not resolve |
bors
added a commit
that referenced
this issue
Oct 31, 2013
Jarcho
pushed a commit
to Jarcho/rust
that referenced
this issue
Aug 29, 2022
Add lint recommending using `std::iter::once` and `std::iter::empty` ``` changelog: [`iter_once`]: add new lint changelog: [`iter_empty`]: add new lint ``` fixes rust-lang#9186 - \[ ] Followed [lint naming conventions][lint_naming] - \[x] Added passing UI tests (including committed `.stderr` file) - \[x] `cargo test` passes locally - \[x] Executed `cargo dev update_lints` - \[x] Added lint documentation - \[x] Run `cargo dev fmt` [lint_naming]: https://rust-lang.github.io/rfcs/0344-conventions-galore.html#lints The lint doesn't really follow the naming conventions. I don't have any better idea so I'm open to suggestions.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
It turns out that an inner static is only generated once. Hence if you have a generic function and the static somehow takes the generic type into account, the static will have the same address for all instantiations. Turns out this is a soundness problem with TLS:
Notably, the inner static
foo
has the same address each time the functionfoo
is instantiated, hencek1
andk2
are the same value, so the firstlocal_data::get
is actually printing the hex representation of1f
.Naturally this allows arbitrary coercion of types via TLS in safe code, this is a definite soundness issue.
You can't declare inner functions with the type parameters declared in outer functions, so perhaps the same rule should apply to statics as well? If not, then this is a codegen problem.
The text was updated successfully, but these errors were encountered: