Skip to content

Implement AsRef<ByteStr> for [u8] #139441

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

thaliaarchi
Copy link
Contributor

@thaliaarchi thaliaarchi commented Apr 6, 2025

This impl was omitted from #135073 due to inference failures. Add it separately to judge its impact.

Tracked in #139429.

r? libs-api

cc @joshtriplett

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-libs Relevant to the library team, which will review and decide on the PR/issue. labels Apr 6, 2025
@rust-log-analyzer

This comment has been minimized.

This impl was omitted from rust-lang#135073 due to inference failures. Add it
separately to judge its impact.
@thaliaarchi thaliaarchi force-pushed the asref/slice-to-byte_str branch from 0e7022a to 3317391 Compare April 6, 2025 05:58
@rustbot
Copy link
Collaborator

rustbot commented Apr 6, 2025

Some changes occurred in src/tools/clippy

cc @rust-lang/clippy

@rust-log-analyzer
Copy link
Collaborator

The job x86_64-gnu-llvm-19 failed! Check out the build log: (web) (plain)

Click to see the possible cause of the failure (guessed by this bot)
#19 exporting to docker image format
#19 sending tarball 20.0s done
#19 DONE 26.0s
##[endgroup]
Setting extra environment values for docker:  --env ENABLE_GCC_CODEGEN=1 --env GCC_EXEC_PREFIX=/usr/lib/gcc/
[CI_JOB_NAME=x86_64-gnu-llvm-19]
[CI_JOB_NAME=x86_64-gnu-llvm-19]
debug: `DISABLE_CI_RUSTC_IF_INCOMPATIBLE` configured.
---
sccache: Listening on address 127.0.0.1:4226
##[group]Configure the build
configure: processing command line
configure: 
configure: build.configure-args := ['--build=x86_64-unknown-linux-gnu', '--llvm-root=/usr/lib/llvm-19', '--enable-llvm-link-shared', '--set', 'rust.randomize-layout=true', '--set', 'rust.thin-lto-import-instr-limit=10', '--set', 'build.print-step-timings', '--enable-verbose-tests', '--set', 'build.metrics', '--enable-verbose-configure', '--enable-sccache', '--disable-manage-submodules', '--enable-locked-deps', '--enable-cargo-native-static', '--set', 'rust.codegen-units-std=1', '--set', 'dist.compression-profile=balanced', '--dist-compression-formats=xz', '--set', 'rust.lld=false', '--disable-dist-src', '--release-channel=nightly', '--enable-debug-assertions', '--enable-overflow-checks', '--enable-llvm-assertions', '--set', 'rust.verify-llvm-ir', '--set', 'rust.codegen-backends=llvm,cranelift,gcc', '--set', 'llvm.static-libstdcpp', '--enable-new-symbol-mangling']
configure: build.build          := x86_64-unknown-linux-gnu
configure: target.x86_64-unknown-linux-gnu.llvm-config := /usr/lib/llvm-19/bin/llvm-config
configure: llvm.link-shared     := True
configure: rust.randomize-layout := True
configure: rust.thin-lto-import-instr-limit := 10
---
  Number of decisions:   4447
  longest path:          1159 (code:    152)
  longest backtrack:       66 (code:    428)
Shared 86733 out of 152951 states by creating 14756 new states, saving 71977
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/expmed.cc: In function ‘rtx_def* extract_bit_field_1(rtx, poly_uint64, poly_uint64, int, rtx, machine_mode, machine_mode, bool, bool, rtx_def**)’:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/expmed.cc:1864:45: warning: ‘*(unsigned int*)((char*)&imode + offsetof(scalar_int_mode, scalar_int_mode::m_mode))’ may be used uninitialized [-Wmaybe-uninitialized]
 1864 |       rtx sub = extract_bit_field_as_subreg (mode1, op0, imode,
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
 1865 |                                              bitsize, bitnum);
      |                                              ~~~~~~~~~~~~~~~~
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/expmed.cc:1824:19: note: ‘*(unsigned int*)((char*)&imode + offsetof(scalar_int_mode, scalar_int_mode::m_mode))’ was declared here
 1824 |   scalar_int_mode imode;
      |                   ^~~~~
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/gimple-range-gori.cc: In member function ‘void range_def_chain::dump(FILE*, basic_block, const char*)’:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/gimple-range-gori.cc:319:19: warning: format not a string literal and no format arguments [-Wformat-security]
  319 |           fprintf (f, prefix);
      |           ~~~~~~~~^~~~~~~~~~~
---
                 from /checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/analyzer/region-model.h:33,
                 from /checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/analyzer/access-diagram.cc:39:
In constructor ‘ana::byte_range::byte_range(ana::byte_offset_t, ana::byte_size_t)’,
    inlined from ‘virtual text_art::table ana::string_literal_spatial_item::make_table(const ana::bit_to_table_map&, text_art::style_manager&) const’ at /checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/analyzer/access-diagram.cc:1812:18:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/analyzer/store.h:312:5: warning: ‘size_in_bytes.generic_wide_int<fixed_wide_int_storage<128> >::fixed_wide_int_storage<128>.fixed_wide_int_storage<128>::val[1]’ may be used uninitialized [-Wmaybe-uninitialized]
  312 |     m_size_in_bytes (size_in_bytes)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/analyzer/access-diagram.cc: In member function ‘virtual text_art::table ana::string_literal_spatial_item::make_table(const ana::bit_to_table_map&, text_art::style_manager&) const’:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/analyzer/access-diagram.cc:1808:28: note: ‘size_in_bytes.generic_wide_int<fixed_wide_int_storage<128> >::fixed_wide_int_storage<128>.fixed_wide_int_storage<128>::val[1]’ was declared here
 1808 |                byte_size_t size_in_bytes
      |                            ^~~~~~~~~~~~~
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/diagnostic.cc: In function ‘void fancy_abort(const char*, int, const char*)’:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/diagnostic.cc:1677:15: warning: format not a string literal and no format arguments [-Wformat-security]
 1677 |       fnotice (stderr, diagnostic_kind_text[DK_ICE]);
---
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/gcc.cc:7930:9: warning: ignoring return value of ‘ssize_t write(int, const void*, size_t)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
 7930 |   write (fd, "\n\n", 2);
      |   ~~~~~~^~~~~~~~~~~~~~~
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/gcc.cc: In member function ‘void driver::final_actions() const’:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/gcc.cc:9307:13: warning: ignoring return value of ‘int truncate(const char*, __off_t)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
 9307 |     truncate(totruncate_file, 0);
      |     ~~~~~~~~^~~~~~~~~~~~~~~~~~~~
In file included from /checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/jit-playback.h:31,
                 from /checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/jit-builtins.cc:24:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/jit-recording.h: In member function ‘virtual bool gcc::jit::recording::type::is_same_type_as(gcc::jit::recording::type*)’:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/jit-recording.h:640:20: warning: suggest parentheses around ‘&&’ within ‘||’ [-Wparentheses]
---
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/lto/lto-common.cc: In function ‘void lto_resolution_read(splay_tree, FILE*, lto_file*)’:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/lto/lto-common.cc:2091:10: warning: ignoring return value of ‘int fscanf(FILE*, const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
 2091 |   fscanf (resolution, " ");   /* Read white space.  */
      |   ~~~~~~~^~~~~~~~~~~~~~~~~
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/lto/lto-common.cc:2093:9: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
 2093 |   fread (obj_name, sizeof (char), name_len, resolution);
      |   ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/lto/lto-common.cc:2113:10: warning: ignoring return value of ‘int fscanf(FILE*, const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
 2113 |   fscanf (resolution, "%u", &num_symbols);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/jit-recording.cc:32:
---
Applying io_quotes_use            to linux/blkzoned.h
Applying io_quotes_use            to linux/ipmi.h
Applying io_quotes_use            to linux/psp-dbc.h
Applying io_quotes_use            to linux/bt-bmc.h
Applying io_quotes_use            to linux/tps6594_pfsm.h
Applying io_quotes_use            to linux/cxl_mem.h
Applying io_quotes_use            to linux/wmi.h
Applying io_quotes_use            to linux/auto_fs.h
Applying io_quotes_use            to linux/mmtimer.h
Applying io_quotes_use            to linux/f2fs.h
Applying io_quotes_use            to linux/vhost.h
---
Applying io_quotes_use            to sound/asound.h
Applying io_quotes_use            to sound/compress_offload.h
Applying hpux8_bogus_inlines      to math.h
Applying pthread_incomplete_struct_argument to pthread.h
Fixed:  pthread.h
Applying io_quotes_use            to misc/mrvl_cn10k_dpi.h
Applying io_quotes_use            to misc/ocxl.h
Applying io_quotes_use            to misc/cxl.h
Applying io_quotes_use            to misc/xilinx_sdfec.h
Applying io_quotes_def            to unicode/platform.h
Applying sun_malloc               to malloc.h
Applying io_quotes_use            to scsi/cxlflash_ioctl.h
---
Applying machine_name             to x86_64-linux-gnu/bits/unistd_ext.h
Applying io_quotes_use            to x86_64-linux-gnu/asm/mtrr.h
Applying io_quotes_use            to x86_64-linux-gnu/asm/amd_hsmp.h
Applying machine_name             to openssl/e_os2.h
Applying io_quotes_use            to drm/xe_drm.h
Applying io_quotes_use            to drm/radeon_drm.h
Applying io_quotes_use            to drm/panfrost_drm.h
Applying io_quotes_use            to drm/etnaviv_drm.h
Applying io_quotes_use            to drm/lima_drm.h
Applying io_quotes_use            to drm/qaic_accel.h
Applying io_quotes_use            to drm/vc4_drm.h
Applying io_quotes_use            to drm/i915_drm.h
Applying io_quotes_use            to drm/omap_drm.h
Applying io_quotes_use            to drm/pvr_drm.h
Applying io_quotes_use            to drm/amdgpu_drm.h
Applying io_quotes_use            to drm/vgem_drm.h
Applying io_quotes_use            to drm/msm_drm.h
Applying io_quotes_use            to drm/v3d_drm.h
Applying io_quotes_use            to drm/exynos_drm.h
Applying io_quotes_use            to drm/nouveau_drm.h
Applying io_quotes_use            to drm/drm.h
Applying io_quotes_use            to drm/habanalabs_accel.h
Applying io_quotes_use            to drm/tegra_drm.h
Applying io_quotes_use            to rdma/rdma_user_ioctl.h
cc1: note: self-tests are not enabled in this build
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/c++tools/server.cc: In function ‘void server(bool, int, module_resolver*)’:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/c++tools/server.cc:620:10: warning: ignoring return value of ‘int pipe(int*)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
---
[RUSTC-TIMING] proc_macro test:false 5.011
[RUSTC-TIMING] test test:false 8.995
    Finished `release` profile [optimized] target(s) in 1m 19s
##[endgroup]
[TIMING] core::build_steps::compile::Std { target: x86_64-unknown-linux-gnu, compiler: Compiler { stage: 1, host: x86_64-unknown-linux-gnu, forced_compiler: true }, crates: [], force_recompile: false, extra_rust_args: ["-Csymbol-mangling-version=v0", "-Cpanic=abort"], is_for_mir_opt_tests: false } -- 79.457
Testing GCC stage1 (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
 Downloading crates ...
  Downloaded boml v0.3.1
   Compiling boml v0.3.1
[RUSTC-TIMING] boml test:false 0.804
   Compiling y v0.1.0 (/checkout/compiler/rustc_codegen_gcc/build_system)
[RUSTC-TIMING] y test:false 2.964
    Finished `release` profile [optimized] target(s) in 4.18s
     Running `/checkout/obj/build/x86_64-unknown-linux-gnu/stage1-codegen/x86_64-unknown-linux-gnu/release/y test --use-backend gcc --gcc-path /checkout/obj/build/x86_64-unknown-linux-gnu/gcc/install/lib --out-dir /checkout/obj/build/x86_64-unknown-linux-gnu/stage1-tools/cg_gcc --release --mini-tests --std-tests`
`--gcc-path` was provided, ignoring config file. Using `/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/install/lib` as path for libgccjit
[BUILD] mini_core
[RUSTC-TIMING] mini_core test:false 0.196
[BUILD] example
[AOT] mini_core_hello_world
[RUSTC-TIMING] mini_core_hello_world test:false 0.184
---
[RUSTC-TIMING] digest test:false 0.407
error[E0283]: type annotations needed
   --> /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/jiff-0.2.5/src/shared/posix.rs:26:42
    |
26  |             Parser { ianav3plus: true, ..Parser::new(bytes.as_ref()) };
    |                                          ^^^^^^^^^^^ -------------- type must be known at this point
    |                                          |
    |                                          cannot infer type of the type parameter `B` declared on the associated function `new`
    |
    = note: multiple `impl`s satisfying `_: AsRef<[u8]>` found in the following crates: `alloc`, `core`:
            - impl AsRef<[u8]> for ByteStr;
            - impl AsRef<[u8]> for ByteString;
            - impl AsRef<[u8]> for String;
            - impl AsRef<[u8]> for str;
note: required by a bound in `shared::posix::Parser::<'s>::new`
   --> /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/jiff-0.2.5/src/shared/posix.rs:602:24
    |
602 |     fn new<B: ?Sized + AsRef<[u8]>>(tz: &'s B) -> Parser<'s> {
    |                        ^^^^^^^^^^^ required by this bound in `Parser::<'s>::new`
help: consider specifying the generic argument
    |
26  |             Parser { ianav3plus: true, ..Parser::new::<B>(bytes.as_ref()) };
    |                                                     +++++
help: consider removing this method call, as the receiver has type `&[u8]` and `&[u8]: AsRef<[u8]>` trivially holds
    |
26  -             Parser { ianav3plus: true, ..Parser::new(bytes.as_ref()) };
26  +             Parser { ianav3plus: true, ..Parser::new(bytes) };
    |

error[E0283]: type annotations needed
   --> /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/jiff-0.2.5/src/shared/posix.rs:38:42
    |
38  |             Parser { ianav3plus: true, ..Parser::new(bytes.as_ref()) };
    |                                          ^^^^^^^^^^^ -------------- type must be known at this point
    |                                          |
    |                                          cannot infer type of the type parameter `B` declared on the associated function `new`
    |
    = note: multiple `impl`s satisfying `_: AsRef<[u8]>` found in the following crates: `alloc`, `core`:
            - impl AsRef<[u8]> for ByteStr;
            - impl AsRef<[u8]> for ByteString;
            - impl AsRef<[u8]> for String;
            - impl AsRef<[u8]> for str;
note: required by a bound in `shared::posix::Parser::<'s>::new`
   --> /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/jiff-0.2.5/src/shared/posix.rs:602:24
    |
602 |     fn new<B: ?Sized + AsRef<[u8]>>(tz: &'s B) -> Parser<'s> {
    |                        ^^^^^^^^^^^ required by this bound in `Parser::<'s>::new`
help: consider specifying the generic argument
    |
38  |             Parser { ianav3plus: true, ..Parser::new::<B>(bytes.as_ref()) };
    |                                                     +++++
help: consider removing this method call, as the receiver has type `&'b [u8]` and `&'b [u8]: AsRef<[u8]>` trivially holds
    |
38  -             Parser { ianav3plus: true, ..Parser::new(bytes.as_ref()) };
38  +             Parser { ianav3plus: true, ..Parser::new(bytes) };
    |

[RUSTC-TIMING] sha2 test:false 1.509
[RUSTC-TIMING] pulldown_cmark test:false 4.908
   Compiling terminal_size v0.4.2
---
   Compiling bstr v1.11.3
   Compiling env_filter v0.1.3
For more information about this error, try `rustc --explain E0283`.
[RUSTC-TIMING] jiff test:false 8.463
error: could not compile `jiff` (lib) due to 2 previous errors
warning: build failed, waiting for other jobs to finish...
[RUSTC-TIMING] regex test:false 1.694
[RUSTC-TIMING] env_filter test:false 1.533
[RUSTC-TIMING] regex_automata test:false 11.871
[RUSTC-TIMING] syn test:false 11.944

@thaliaarchi
Copy link
Contributor Author

The failure is now from inference failures in external crates.

BurntSushi added a commit to BurntSushi/jiff that referenced this pull request Apr 6, 2025
I believe the signature of the constructor was originally generic over
`AsRef<[u8]>`, but it got changed to be concrete. However, the
implementation continued calling `as_ref()` unnecessarily. This looks
harmless, but exposes us to inference failures.

Ref rust-lang/rust#139441
@dtolnay
Copy link
Member

dtolnay commented Apr 13, 2025

Add it separately to judge its impact.

If you are looking for a crater run on this PR, we'll need a green build first before that can be kicked off. Please try updating jiff from 0.2.5 to 0.2.6 to pull in BurntSushi/jiff@f41d586.

error[E0283]: type annotations needed
   --> /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/jiff-0.2.5/src/shared/posix.rs:26:42
    |
26  |             Parser { ianav3plus: true, ..Parser::new(bytes.as_ref()) };
    |                                          ^^^^^^^^^^^ -------------- type must be known at this point
    |                                          |
    |                                          cannot infer type of the type parameter `B` declared on the associated function `new`
    |
    = note: multiple `impl`s satisfying `_: AsRef<[u8]>` found in the following crates: `alloc`, `core`:
            - impl AsRef<[u8]> for ByteStr;
            - impl AsRef<[u8]> for ByteString;
            - impl AsRef<[u8]> for String;
            - impl AsRef<[u8]> for str;
note: required by a bound in `shared::posix::Parser::<'s>::new`
   --> /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/jiff-0.2.5/src/shared/posix.rs:602:24
    |
602 |     fn new<B: ?Sized + AsRef<[u8]>>(tz: &'s B) -> Parser<'s> {
    |                        ^^^^^^^^^^^ required by this bound in `Parser::<'s>::new`
help: consider specifying the generic argument
    |
26  |             Parser { ianav3plus: true, ..Parser::new::<B>(bytes.as_ref()) };
    |                                                     +++++
help: consider removing this method call, as the receiver has type `&[u8]` and `&[u8]: AsRef<[u8]>` trivially holds
    |
26  -             Parser { ianav3plus: true, ..Parser::new(bytes.as_ref()) };
26  +             Parser { ianav3plus: true, ..Parser::new(bytes) };
    |

@dtolnay dtolnay added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. needs-crater This change needs a crater run to check for possible breakage in the ecosystem. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Apr 13, 2025
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
needs-crater This change needs a crater run to check for possible breakage in the ecosystem. S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-libs Relevant to the library team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants