Skip to content
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

librustc: adjust logic for cfg attribute and add not predicate. #5410

Merged
merged 6 commits into from
Mar 20, 2013

Conversation

luqmana
Copy link
Member

@luqmana luqmana commented Mar 16, 2013

This adopts the syntax from #2119. No more annoying workarounds involving wrapping in mods!

@sanxiyn
Copy link
Member

sanxiyn commented Mar 17, 2013

Looks good. Is there a way to test this?

@graydon
Copy link
Contributor

graydon commented Mar 19, 2013

Tests would be good here, yeah. Also -- this is weird to mention -- but reading it now and looking at the variants, I think maybe I'd expect the comma-list to be OR-ed and multiple juxtaposed #[cfg(...)] attributes to be AND-ed. That is, I think my eyes scan

#[cfg(linux,osx)]
#[cfg(debug)]
fn foo() { ... }

as meaning "(linux OR osx) AND debug", rather than "(linux AND osx) OR debug" as I think this patch implements. But I'm not sure it matters, so long as there's some canonical reading. Do you have a strong feeling, yourself?

@luqmana
Copy link
Member Author

luqmana commented Mar 19, 2013

I don't have a preference one way or the other. The only problem though is that the current behaviour is multiple cfg's are OR-ed so changing it now would be annoying to say the least.

For your example maybe there should be something like:

#[cfg(debug, or(linux, osx))]
fn foo() { ... }

@graydon
Copy link
Contributor

graydon commented Mar 19, 2013

Ok. Commented in the original bug (which I will ask to remain open for now) concerning long-term fixes to this, but the patch as provided is acceptable. Can you add some tests?

@luqmana
Copy link
Member Author

luqmana commented Mar 19, 2013

Obviously, I am amazing at naming :)

Make comment describe actual behaviour.
bors added a commit that referenced this pull request Mar 20, 2013
This adopts the syntax from #2119. No more annoying workarounds involving wrapping in mods!
@bors bors closed this Mar 20, 2013
@bors bors merged commit 811d880 into rust-lang:incoming Mar 20, 2013
oli-obk pushed a commit to oli-obk/rust that referenced this pull request May 2, 2020
Downgrade trivially_copy_pass_by_ref to pedantic

The rationale for this lint is documented as:

> In many calling conventions instances of structs will be passed through registers if they fit into two or less general purpose registers.

I think the purported performance benefits of clippy's recommendation are overstated. This isn't worth asking people to sprinkle code with more `*`​`*`​`&`​`*`​`&` to chase the alleged performance.

This should be a pedantic lint that is disabled by default and opted in if some specific performance sensitive codebase determines that it is worthwhile.

As a reminder, a typical place that a reference to a primitive would come up is if the function is used as a filter. Triggering a performance-oriented lint on this type of code is the definition of pedantic.

```rust
fn filter(_n: &i32) -> bool {
    true
}

fn main() {
    let v = vec![1, 2, 3];
    v.iter().copied().filter(filter).for_each(drop);
}
```

```console
warning: this argument (4 byte) is passed by reference, but would be more efficient if passed by value (limit: 8 byte)
 --> src/main.rs:1:15
  |
1 | fn filter(_n: &i32) -> bool {
  |               ^^^^ help: consider passing by value instead: `i32`
```

changelog: Remove trivially_copy_pass_by_ref from default set of enabled lints
oli-obk pushed a commit to oli-obk/rust that referenced this pull request May 2, 2020
Rollup of 11 pull requests

Successful merges:

 - rust-lang#5406 (Fix update_lints)
 - rust-lang#5409 (Downgrade let_unit_value to pedantic)
 - rust-lang#5410 (Downgrade trivially_copy_pass_by_ref to pedantic)
 - rust-lang#5412 (Downgrade inefficient_to_string to pedantic)
 - rust-lang#5415 (Add new lint for `Result<T, E>.map_or(None, Some(T))`)
 - rust-lang#5417 (Update doc links and mentioned names in docs)
 - rust-lang#5419 (Downgrade unreadable_literal to pedantic)
 - rust-lang#5420 (Downgrade new_ret_no_self to pedantic)
 - rust-lang#5422 (CONTRIBUTING.md: fix broken triage link)
 - rust-lang#5424 (Incorrect suspicious_op_assign_impl)
 - rust-lang#5425 (Ehance opt_as_ref_deref lint.)

Failed merges:

 - rust-lang#5345 (Add lint for float in array comparison)
 - rust-lang#5411 (Downgrade implicit_hasher to pedantic)
 - rust-lang#5428 (Move cognitive_complexity to nursery)

r? @ghost

changelog: rollup
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants