rust/library/core/tests
León Orell Valerian Liehr 35ea48d588
Rollup merge of #118833 - Urgau:lint_function_pointer_comparisons, r=cjgillot
Add lint against function pointer comparisons

This is kind of a follow-up to https://github.com/rust-lang/rust/pull/117758 where we added a lint against wide pointer comparisons for being ambiguous and unreliable; well function pointer comparisons are also unreliable. We should IMO follow a similar logic and warn people about it.

-----

## `unpredictable_function_pointer_comparisons`

*warn-by-default*

The `unpredictable_function_pointer_comparisons` lint checks comparison of function pointer as the operands.

### Example

```rust
fn foo() {}
let a = foo as fn();

let _ = a == foo;
```

### Explanation

Function pointers comparisons do not produce meaningful result since they are never guaranteed to be unique and could vary between different code generation units. Furthermore different function could have the same address after being merged together.

----

This PR also uplift the very similar `clippy::fn_address_comparisons` lint, which only linted on if one of the operand was an `ty::FnDef` while this PR lints proposes to lint on all `ty::FnPtr` and `ty::FnDef`.

```@rustbot``` labels +I-lang-nominated

~~Edit: Blocked on https://github.com/rust-lang/libs-team/issues/323 being accepted and it's follow-up pr~~
2024-12-05 07:29:53 +01:00
..
async_iter Remove unnecessary lets and borrowing from Waker::noop() usage. 2024-01-17 12:00:27 -08:00
ffi CStr: derive PartialEq, Eq; add test for Ord 2024-07-25 14:18:40 +03:00
fmt Shorten the MaybeUninit Debug implementation 2024-11-22 19:46:34 -05:00
hash Library: Rename "object safe" to "dyn compatible" 2024-10-09 18:48:29 +02:00
io Make io::BorrowedCursor::advance safe 2024-02-07 16:46:28 +01:00
iter distinguish overflow and unimplemented in Step::steps_between 2024-11-21 15:49:55 -08:00
net core/net: add Ipv[46]Addr::from_octets, Ipv6Addr::from_segments 2024-10-13 20:26:23 +02:00
num Add test for all midpoint expectations 2024-10-26 22:08:34 +02:00
ops Explicitly specify type parameter on FromResidual impls in stdlib. 2024-08-12 12:54:18 -05:00
panic Fix test (location_const_file) 2022-10-08 11:48:53 +00:00
alloc.rs rename ptr::invalid -> ptr::without_provenance 2024-02-21 20:15:52 +01:00
any.rs Adjust library tests for unused_tuple_struct_fields -> dead_code 2024-01-02 15:34:37 -05:00
array.rs Reformat use declarations. 2024-07-29 08:26:52 +10:00
ascii.rs Optimize escape_ascii 2024-10-09 17:17:50 -04:00
ascii_char.rs core: optimise Debug impl for ascii::Char 2024-08-09 22:50:57 +02:00
asserting.rs Spelling library/ 2023-04-26 02:10:22 -04:00
atomic.rs update bootstrap configs 2024-10-15 20:30:23 -07:00
bool.rs fix library and rustdoc tests 2023-04-16 11:38:52 +00:00
cell.rs apply fmt 2024-01-11 15:04:48 +03:00
char.rs remove redundant imports 2023-12-10 10:56:22 +08:00
clone.rs Update core CloneToUninit tests 2024-11-13 13:42:41 -06:00
cmp.rs Reformat use declarations. 2024-07-29 08:26:52 +10:00
const_ptr.rs cleanup code w/ pointers in std a little 2022-08-05 16:47:49 +04:00
convert.rs fix library and rustdoc tests 2023-04-16 11:38:52 +00:00
error.rs Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
ffi.rs CStr: derive PartialEq, Eq; add test for Ord 2024-07-25 14:18:40 +03:00
future.rs Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
intrinsics.rs Step bootstrap cfgs 2024-05-01 22:19:11 -04:00
lazy.rs Do not run test where it cannot run 2024-10-17 09:33:39 -04:00
lib.rs stabilize const_{size,align}_of_val 2024-12-02 20:18:25 +01:00
macros.rs Rustfmt 2024-09-13 15:18:30 -03:00
manually_drop.rs Flip cfg's for bootstrap bump 2023-07-12 21:38:55 -04:00
mem.rs fix UB in a test 2024-09-09 16:17:34 +02:00
nonzero.rs Add LowerExp and UpperExp implementations 2024-10-08 12:09:03 +02:00
ops.rs Explicitly specify type parameter on FromResidual impls in stdlib. 2024-08-12 12:54:18 -05:00
option.rs Make Option::as_[mut_]slice const 2024-06-19 21:44:47 +01:00
panic.rs Add newlines 2022-09-27 19:23:52 +00:00
pattern.rs mv std libs to library/ 2020-07-27 19:51:13 -05:00
pin.rs Partially stabilize const_pin 2024-10-16 21:24:38 +01:00
pin_macro.rs Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
ptr.rs Allow fn pointers comparisons lint in library 2024-12-02 18:43:37 +01:00
result.rs Reformat use declarations. 2024-07-29 08:26:52 +10:00
simd.rs Fix library tests 2023-11-26 08:50:39 -05:00
slice.rs Support ranges in <[T]>::get_many_mut() 2024-11-25 10:04:06 +02:00
str.rs Update paths in comments. 2022-12-30 14:00:42 +01:00
str_lossy.rs Stabilize Utf8Chunks 2024-04-24 15:27:47 -07:00
task.rs Remove test of static Context 2023-01-02 10:33:23 -08:00
time.rs core: add Duration constructors 2024-01-24 14:24:57 +01:00
tuple.rs mv std libs to library/ 2020-07-27 19:51:13 -05:00
unicode.rs revert changes to unicode stability 2022-07-08 21:18:15 +00:00
waker.rs Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00