Skip to content

Conversation

@BD103
Copy link
Contributor

@BD103 BD103 commented Jan 12, 2026

Tracking issue: #146922
Fixes #151018

Type::of is a utility function for getting type reflection information, and internally just calls TypeId::of::<T>().info(). Type::of does not support unsized types like str and [u8] because it is missing a ?Sized bound. I believe this is an oversight rather than an intentional decision, as TypeId::of does support unsized types and Type::size is an Option to support types without sizes.

This PR adds a ?Sized bound to Type::of and extends the dump.rs test to ensure unsized types work in the future.

r? @oli-obk

BD103 added 2 commits January 12, 2026 14:42
I chose to simply extend `dump.rs`, rather than create a new UI test.
@rustbot
Copy link
Collaborator

rustbot commented Jan 12, 2026

The reflection data structures are tied exactly to the implementation
in the compiler. Make sure to also adjust `rustc_const_eval/src/const_eval/type_info.rs

cc @oli-obk

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-libs Relevant to the library team, which will review and decide on the PR/issue. labels Jan 12, 2026
@rustbot
Copy link
Collaborator

rustbot commented Jan 12, 2026

oli-obk is not on the review rotation at the moment.
They may take a while to respond.

@SpriteOvO SpriteOvO added F-type_info #![feature(type_info)] A-type-system Area: Type system labels Jan 13, 2026
@oli-obk
Copy link
Contributor

oli-obk commented Jan 13, 2026

@bors r+ rollup

@rust-bors rust-bors bot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jan 13, 2026
@rust-bors
Copy link
Contributor

rust-bors bot commented Jan 13, 2026

📌 Commit 1bde2f4 has been approved by oli-obk

It is now in the queue for this repository.

JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Jan 13, 2026
Make `Type::of` support unsized types

Tracking issue: rust-lang#146922
Fixes rust-lang#151018

`Type::of` is a utility function for getting type reflection information, and internally just calls `TypeId::of::<T>().info()`. `Type::of` does not support unsized types like `str` and `[u8]` because it is missing a `?Sized` bound. I believe this is an oversight rather than an intentional decision, as `TypeId::of` _does_ support unsized types and `Type::size` is an `Option` to support types without sizes.

This PR adds a `?Sized` bound to `Type::of` and extends the `dump.rs` test to ensure unsized types work in the future.

r? @oli-obk
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Jan 13, 2026
Make `Type::of` support unsized types

Tracking issue: rust-lang#146922
Fixes rust-lang#151018

`Type::of` is a utility function for getting type reflection information, and internally just calls `TypeId::of::<T>().info()`. `Type::of` does not support unsized types like `str` and `[u8]` because it is missing a `?Sized` bound. I believe this is an oversight rather than an intentional decision, as `TypeId::of` _does_ support unsized types and `Type::size` is an `Option` to support types without sizes.

This PR adds a `?Sized` bound to `Type::of` and extends the `dump.rs` test to ensure unsized types work in the future.

r? @oli-obk
rust-bors bot pushed a commit that referenced this pull request Jan 13, 2026
…uwer

Rollup of 13 pull requests

Successful merges:

 - #150586 (rustdoc: Fix intra-doc link bugs involving type aliases and associated items)
 - #150677 (Improve std::path::Path::join documentation)
 - #150723 (std: move `errno` and related functions into `sys::io`)
 - #150737 (diagnostics: make implicit Sized bounds explicit in E0277)
 - #150771 (Remove legacy homu `try` and `auto` branch mentions)
 - #150915 (Regression test for type params on eii)
 - #150962 (Remove `FeedConstTy` and provide ty when lowering const arg)
 - #151017 (Port the rustc dump attributes to the attribute parser)
 - #151019 (Make `Type::of` support unsized types)
 - #151034 (std: Change UEFI env vars to volatile storage)
 - #151052 (ui: add regression test for macro resolution ICE (issue #150711))
 - #151053 (Reduce flakyness for `tests/rustdoc-gui/notable-trait.goml`)
 - #151055 (Emit error instead of delayed bug when meeting mismatch type for const array)

r? @ghost
GuillaumeGomez added a commit to GuillaumeGomez/rust that referenced this pull request Jan 13, 2026
Make `Type::of` support unsized types

Tracking issue: rust-lang#146922
Fixes rust-lang#151018

`Type::of` is a utility function for getting type reflection information, and internally just calls `TypeId::of::<T>().info()`. `Type::of` does not support unsized types like `str` and `[u8]` because it is missing a `?Sized` bound. I believe this is an oversight rather than an intentional decision, as `TypeId::of` _does_ support unsized types and `Type::size` is an `Option` to support types without sizes.

This PR adds a `?Sized` bound to `Type::of` and extends the `dump.rs` test to ensure unsized types work in the future.

r? @oli-obk
GuillaumeGomez added a commit to GuillaumeGomez/rust that referenced this pull request Jan 13, 2026
Make `Type::of` support unsized types

Tracking issue: rust-lang#146922
Fixes rust-lang#151018

`Type::of` is a utility function for getting type reflection information, and internally just calls `TypeId::of::<T>().info()`. `Type::of` does not support unsized types like `str` and `[u8]` because it is missing a `?Sized` bound. I believe this is an oversight rather than an intentional decision, as `TypeId::of` _does_ support unsized types and `Type::size` is an `Option` to support types without sizes.

This PR adds a `?Sized` bound to `Type::of` and extends the `dump.rs` test to ensure unsized types work in the future.

r? @oli-obk
rust-bors bot pushed a commit that referenced this pull request Jan 14, 2026
Rollup of 13 pull requests

Successful merges:

 - #150587 (triagebot: add A-rustdoc-js autolabel)
 - #150677 (Improve std::path::Path::join documentation)
 - #150737 (diagnostics: make implicit Sized bounds explicit in E0277)
 - #150771 (Remove legacy homu `try` and `auto` branch mentions)
 - #150840 (Make `--print=check-cfg` output compatible `--check-cfg` arguments)
 - #150915 (Regression test for type params on eii)
 - #151017 (Port the rustc dump attributes to the attribute parser)
 - #151019 (Make `Type::of` support unsized types)
 - #151031 (Support arrays in type reflection)
 - #151043 (armv7-unknown-linux-uclibceabihf.md: Fix bootstrap.toml syntax)
 - #151052 (ui: add regression test for macro resolution ICE (issue #150711))
 - #151053 (Reduce flakyness for `tests/rustdoc-gui/notable-trait.goml`)
 - #151055 (Emit error instead of delayed bug when meeting mismatch type for const array)

r? @ghost
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-type-system Area: Type system F-type_info #![feature(type_info)] S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. 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.

Type:of does not support types without a size

4 participants