public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r14-7865] gccrs: Begin enforcing Sized properly and support anti traits like ?Sized
@ 2024-01-16 18:05 Arthur Cohen
  0 siblings, 0 replies; only message in thread
From: Arthur Cohen @ 2024-01-16 18:05 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:6164ec07c64f9ceb40fc5f4f6efb5c0f836fb04f

commit r14-7865-g6164ec07c64f9ceb40fc5f4f6efb5c0f836fb04f
Author: Philip Herron <herron.philip@googlemail.com>
Date:   Tue Jul 18 17:46:08 2023 +0100

    gccrs: Begin enforcing Sized properly and support anti traits like ?Sized
    
    Sized is implicitly applied to every generic type parameter apart from the
    implicit Self type parameter on traits, as that would cause a recursive
    bound and would make Traits unable to be appied to unsized types.
    
    In order to keep everything happy this means we also need to support the
    anti trait bound '?' so that Sized can be removed properly. The full Sized
    rules are not completely implemented here. Slice's and Str's are currently
    marked as Sized but there is a small regression here that looks like a more
    general bug which should be fixed on its own as part of #2443. There is
    a big testsuite update here to pull in the Sized lang item.
    
    Note this lays the bound's ground work so we can start supporting Drop
    trait properly which needs tackled very soon.
    
    Fixes: #2375
    Addresses: #2443
    
    gcc/rust/ChangeLog:
    
            * expand/rust-proc-macro.cc (literal_from_string): update Lexer constructor
            (tokenstream_from_string): likewise
            * lex/rust-lex.cc (Lexer::Lexer): likewise
            * lex/rust-lex.h: pass through Linemap
            * parse/rust-cfg-parser.cc (parse_cfg_option): likewise
            * rust-session-manager.cc (Session::load_extern_crate): likewise
            * typecheck/rust-hir-trait-resolve.cc (TraitResolver::resolve_trait):
            dont apply Sized on self
            * typecheck/rust-hir-type-check-base.cc (TypeCheckBase::get_marker_predicate): new
            * typecheck/rust-hir-type-check-base.h: add prototype
            * typecheck/rust-hir-type-check-type.cc (TypeResolveGenericParam::Resolve): apply Sized
            (TypeResolveGenericParam::visit): likewise
            * typecheck/rust-hir-type-check-type.h: update prototypes
            * typecheck/rust-typecheck-context.cc: remove bad assertions
            * typecheck/rust-tyty-bounds.cc (TypeBoundsProbe::assemble_sized_builtin): cleanup
            (TypeCheckBase::get_predicate_from_bound): apply sized rules properly
            * util/rust-hir-map.cc (Mappings::lookup_trait_item_lang_item): helpers
            (Mappings::get_lang_item): likewise
            * util/rust-hir-map.h: likewise
            * util/rust-token-converter.cc (from_ident): update lexer ctor
            (from_punct): likewise
    
    gcc/testsuite/ChangeLog:
    
            * rust/compile/bounds1.rs: Apply sized trait
            * rust/compile/canonical_paths1.rs: likewise
            * rust/compile/cast_generics.rs: likewise
            * rust/compile/closure_no_type_anno.rs: likewise
            * rust/compile/complex_qualified_path_in_expr.rs: likewise
            * rust/compile/const-issue1440.rs: likewise
            * rust/compile/const_generics_1.rs: likewise
            * rust/compile/const_generics_8.rs: likewise
            * rust/compile/derive_macro1.rs: likewise
            * rust/compile/derive_macro3.rs: likewise
            * rust/compile/derive_macro4.rs: likewise
            * rust/compile/derive_macro6.rs: likewise
            * rust/compile/expected_type_args2.rs: likewise
            * rust/compile/expected_type_args3.rs: likewise
            * rust/compile/generics1.rs: likewise
            * rust/compile/generics11.rs: likewise
            * rust/compile/generics12.rs: likewise
            * rust/compile/generics2.rs: likewise
            * rust/compile/generics3.rs: likewise
            * rust/compile/generics4.rs: likewise
            * rust/compile/generics6.rs: likewise
            * rust/compile/generics7.rs: likewise
            * rust/compile/generics8.rs: likewise
            * rust/compile/if_let_expr.rs: likewise
            * rust/compile/issue-1005.rs: likewise
            * rust/compile/issue-1019.rs: likewise
            * rust/compile/issue-1031.rs: likewise
            * rust/compile/issue-1034.rs: likewise
            * rust/compile/issue-1128.rs: likewise
            * rust/compile/issue-1129-2.rs: likewise
            * rust/compile/issue-1130.rs: likewise
            * rust/compile/issue-1131.rs: likewise
            * rust/compile/issue-1165.rs: likewise
            * rust/compile/issue-1173.rs: likewise
            * rust/compile/issue-1235.rs: likewise
            * rust/compile/issue-1237.rs: likewise
            * rust/compile/issue-1289.rs: likewise
            * rust/compile/issue-1383.rs: likewise
            * rust/compile/issue-1447.rs: likewise
            * rust/compile/issue-1589.rs: likewise
            * rust/compile/issue-1725-1.rs: likewise
            * rust/compile/issue-1725-2.rs: likewise
            * rust/compile/issue-1773.rs: likewise
            * rust/compile/issue-1786.rs: likewise
            * rust/compile/issue-1893.rs: likewise
            * rust/compile/issue-1901.rs: likewise
            * rust/compile/issue-1930.rs: likewise
            * rust/compile/issue-1981.rs: likewise
            * rust/compile/issue-2019-1.rs: likewise
            * rust/compile/issue-2019-2.rs: likewise
            * rust/compile/issue-2019-3.rs: likewise
            * rust/compile/issue-2036.rs: likewise
            * rust/compile/issue-2037.rs: likewise
            * rust/compile/issue-2070.rs: likewise
            * rust/compile/issue-2105.rs: likewise
            * rust/compile/issue-2106.rs: likewise
            * rust/compile/issue-2135.rs: likewise
            * rust/compile/issue-2136-1.rs: likewise
            * rust/compile/issue-2136-2.rs: likewise
            * rust/compile/issue-2139.rs: likewise
            * rust/compile/issue-2142.rs: likewise
            * rust/compile/issue-2165.rs: likewise
            * rust/compile/issue-2166.rs: likewise
            * rust/compile/issue-2190-1.rs: likewise
            * rust/compile/issue-2190-2.rs: likewise
            * rust/compile/issue-2195.rs: likewise
            * rust/compile/issue-2238.rs: likewise
            * rust/compile/issue-2304.rs: likewise
            * rust/compile/issue-850.rs: likewise
            * rust/compile/issue-855.rs: likewise
            * rust/compile/issue-925.rs: likewise
            * rust/compile/macro-issue1400.rs: likewise
            * rust/compile/macro20.rs: likewise
            * rust/compile/macro23.rs: likewise
            * rust/compile/macro40.rs: likewise
            * rust/compile/macro54.rs: likewise
            * rust/compile/name_resolution2.rs: likewise
            * rust/compile/name_resolution4.rs: likewise
            * rust/compile/nested_generic.rs: likewise
            * rust/compile/parse_associated_type_as_generic_arg.rs: likewise
            * rust/compile/parse_associated_type_as_generic_arg2.rs: likewise
            * rust/compile/parse_associated_type_as_generic_arg3.rs: likewise
            * rust/compile/parse_complex_generic_application.rs: likewise
            * rust/compile/parse_complex_generic_application2.rs: likewise
            * rust/compile/path_as_generic_arg.rs: likewise
            * rust/compile/privacy4.rs: likewise
            * rust/compile/privacy6.rs: likewise
            * rust/compile/sizeof-stray-infer-var-bug.rs: likewise
            * rust/compile/stmt_with_block_dot.rs: likewise
            * rust/compile/torture/associated_types1.rs: likewise
            * rust/compile/torture/forward_decl_5.rs: likewise
            * rust/compile/torture/generics1.rs: likewise
            * rust/compile/torture/generics10.rs: likewise
            * rust/compile/torture/generics11.rs: likewise
            * rust/compile/torture/generics12.rs: likewise
            * rust/compile/torture/generics13.rs: likewise
            * rust/compile/torture/generics14.rs: likewise
            * rust/compile/torture/generics15.rs: likewise
            * rust/compile/torture/generics16.rs: likewise
            * rust/compile/torture/generics17.rs: likewise
            * rust/compile/torture/generics18.rs: likewise
            * rust/compile/torture/generics19.rs: likewise
            * rust/compile/torture/generics2.rs: likewise
            * rust/compile/torture/generics20.rs: likewise
            * rust/compile/torture/generics21.rs: likewise
            * rust/compile/torture/generics22.rs: likewise
            * rust/compile/torture/generics23.rs: likewise
            * rust/compile/torture/generics24.rs: likewise
            * rust/compile/torture/generics25.rs: likewise
            * rust/compile/torture/generics26.rs: likewise
            * rust/compile/torture/generics27.rs: likewise
            * rust/compile/torture/generics28.rs: likewise
            * rust/compile/torture/generics29.rs: likewise
            * rust/compile/torture/generics3.rs: likewise
            * rust/compile/torture/generics30.rs: likewise
            * rust/compile/torture/generics31.rs: likewise
            * rust/compile/torture/generics32.rs: likewise
            * rust/compile/torture/generics4.rs: likewise
            * rust/compile/torture/generics5.rs: likewise
            * rust/compile/torture/generics6.rs: likewise
            * rust/compile/torture/generics7.rs: likewise
            * rust/compile/torture/generics8.rs: likewise
            * rust/compile/torture/generics9.rs: likewise
            * rust/compile/torture/intrinsics-2.rs: likewise
            * rust/compile/torture/intrinsics-6.rs: likewise
            * rust/compile/torture/intrinsics-7.rs: likewise
            * rust/compile/torture/intrinsics-8.rs: likewise
            * rust/compile/torture/issue-1024.rs: likewise
            * rust/compile/torture/issue-1075.rs: likewise
            * rust/compile/torture/issue-1432.rs: likewise
            * rust/compile/torture/issue-1555.rs: likewise
            * rust/compile/torture/issue-368.rs: likewise
            * rust/compile/torture/issue-808.rs: likewise
            * rust/compile/torture/issue-862.rs: likewise
            * rust/compile/torture/issue-893-2.rs: likewise
            * rust/compile/torture/issue-893.rs: likewise
            * rust/compile/torture/must_use2.rs: likewise
            * rust/compile/torture/nested_fn2.rs: likewise
            * rust/compile/torture/phantom_data.rs: likewise
            * rust/compile/torture/range-lang-item1.rs: likewise
            * rust/compile/torture/traits1.rs: likewise
            * rust/compile/torture/traits11.rs: likewise
            * rust/compile/torture/traits12.rs: likewise
            * rust/compile/torture/traits13.rs: likewise
            * rust/compile/torture/traits14.rs: likewise
            * rust/compile/torture/traits15.rs: likewise
            * rust/compile/torture/traits16.rs: likewise
            * rust/compile/torture/traits17.rs: likewise
            * rust/compile/torture/traits18.rs: likewise
            * rust/compile/torture/traits19.rs: likewise
            * rust/compile/torture/traits2.rs: likewise
            * rust/compile/torture/traits3.rs: likewise
            * rust/compile/torture/traits4.rs: likewise
            * rust/compile/torture/traits5.rs: likewise
            * rust/compile/torture/traits6.rs: likewise
            * rust/compile/torture/traits7.rs: likewise
            * rust/compile/torture/traits8.rs: likewise
            * rust/compile/torture/traits9.rs: likewise
            * rust/compile/torture/transmute-size-check-1.rs: likewise
            * rust/compile/torture/transmute1.rs: likewise
            * rust/compile/torture/uninit-intrinsic-1.rs: likewise
            * rust/compile/torture/utf8_identifiers.rs: likewise
            * rust/compile/traits1.rs: likewise
            * rust/compile/traits10.rs: likewise
            * rust/compile/traits11.rs: likewise
            * rust/compile/traits12.rs: likewise
            * rust/compile/traits2.rs: likewise
            * rust/compile/traits3.rs: likewise
            * rust/compile/traits4.rs: likewise
            * rust/compile/traits5.rs: likewise
            * rust/compile/traits6.rs: likewise
            * rust/compile/traits7.rs: likewise
            * rust/compile/traits8.rs: likewise
            * rust/compile/traits9.rs: likewise
            * rust/compile/type-bindings1.rs: likewise
            * rust/compile/unconstrained_type_param.rs: likewise
            * rust/compile/unsafe10.rs: likewise
            * rust/execute/torture/closure1.rs: likewise
            * rust/execute/torture/closure2.rs: likewise
            * rust/execute/torture/closure3.rs: likewise
            * rust/execute/torture/closure4.rs: likewise
            * rust/execute/torture/coercion1.rs: likewise
            * rust/execute/torture/coercion2.rs: likewise
            * rust/execute/torture/coercion3.rs: likewise
            * rust/execute/torture/copy_nonoverlapping1.rs: likewise
            * rust/execute/torture/derive_macro1.rs: likewise
            * rust/execute/torture/derive_macro3.rs: likewise
            * rust/execute/torture/derive_macro4.rs: likewise
            * rust/execute/torture/index1.rs: likewise
            * rust/execute/torture/issue-1120.rs: likewise
            * rust/execute/torture/issue-1133.rs: likewise
            * rust/execute/torture/issue-1198.rs: likewise
            * rust/execute/torture/issue-1232.rs: likewise
            * rust/execute/torture/issue-1249.rs: likewise
            * rust/execute/torture/issue-1436.rs: likewise
            * rust/execute/torture/issue-1496.rs: likewise
            * rust/execute/torture/issue-1720-2.rs: likewise
            * rust/execute/torture/issue-1720.rs: likewise
            * rust/execute/torture/issue-2052.rs: likewise
            * rust/execute/torture/issue-2179.rs: likewise
            * rust/execute/torture/issue-2180.rs: likewise
            * rust/execute/torture/issue-2236.rs: likewise
            * rust/execute/torture/issue-647.rs: likewise
            * rust/execute/torture/issue-845.rs: likewise
            * rust/execute/torture/issue-851.rs: likewise
            * rust/execute/torture/issue-858.rs: likewise
            * rust/execute/torture/macros23.rs: likewise
            * rust/execute/torture/macros28.rs: likewise
            * rust/execute/torture/method2.rs: likewise
            * rust/execute/torture/method3.rs: likewise
            * rust/execute/torture/method4.rs: likewise
            * rust/execute/torture/operator_overload_1.rs: likewise
            * rust/execute/torture/operator_overload_10.rs: likewise
            * rust/execute/torture/operator_overload_11.rs: likewise
            * rust/execute/torture/operator_overload_12.rs: likewise
            * rust/execute/torture/operator_overload_2.rs: likewise
            * rust/execute/torture/operator_overload_3.rs: likewise
            * rust/execute/torture/operator_overload_4.rs: likewise
            * rust/execute/torture/operator_overload_5.rs: likewise
            * rust/execute/torture/operator_overload_6.rs: likewise
            * rust/execute/torture/operator_overload_7.rs: likewise
            * rust/execute/torture/operator_overload_8.rs: likewise
            * rust/execute/torture/operator_overload_9.rs: likewise
            * rust/execute/torture/prefetch_data.rs: likewise
            * rust/execute/torture/ref-pattern2.rs: likewise
            * rust/execute/torture/slice-magic.rs: likewise
            * rust/execute/torture/slice-magic2.rs: likewise
            * rust/execute/torture/slice1.rs: likewise
            * rust/execute/torture/str-layout1.rs: likewise
            * rust/execute/torture/trait1.rs: likewise
            * rust/execute/torture/trait10.rs: likewise
            * rust/execute/torture/trait11.rs: likewise
            * rust/execute/torture/trait12.rs: likewise
            * rust/execute/torture/trait13.rs: likewise
            * rust/execute/torture/trait2.rs: likewise
            * rust/execute/torture/trait3.rs: likewise
            * rust/execute/torture/trait4.rs: likewise
            * rust/execute/torture/trait5.rs: likewise
            * rust/execute/torture/trait6.rs: likewise
            * rust/execute/torture/trait7.rs: likewise
            * rust/execute/torture/trait8.rs: likewise
            * rust/execute/torture/trait9.rs: likewise
            * rust/execute/torture/transmute1.rs: likewise
            * rust/execute/torture/wrapping_op1.rs: likewise
            * rust/execute/torture/wrapping_op2.rs: likewise
            * rust/link/generic_function_0.rs: likewise
            * rust/link/generic_function_1.rs: likewise
            * rust/compile/issue-2375.rs: New test.
    
    Signed-off-by: Philip Herron <herron.philip@googlemail.com>

Diff:
---
 gcc/rust/expand/rust-proc-macro.cc                 |  4 +-
 gcc/rust/lex/rust-lex.cc                           |  4 +-
 gcc/rust/lex/rust-lex.h                            |  2 +-
 gcc/rust/parse/rust-cfg-parser.cc                  |  2 +-
 gcc/rust/rust-session-manager.cc                   |  2 +-
 gcc/rust/typecheck/rust-hir-trait-resolve.cc       | 20 ++++---
 gcc/rust/typecheck/rust-hir-type-check-base.cc     | 17 ++++++
 gcc/rust/typecheck/rust-hir-type-check-base.h      |  8 ++-
 gcc/rust/typecheck/rust-hir-type-check-type.cc     | 69 ++++++++++++++++++++--
 gcc/rust/typecheck/rust-hir-type-check-type.h      |  8 ++-
 gcc/rust/typecheck/rust-typecheck-context.cc       |  3 -
 gcc/rust/typecheck/rust-tyty-bounds.cc             | 48 +++++++++------
 gcc/rust/util/rust-hir-map.cc                      | 21 ++++---
 gcc/rust/util/rust-hir-map.h                       |  6 +-
 gcc/rust/util/rust-token-converter.cc              |  4 +-
 gcc/testsuite/rust/compile/bounds1.rs              |  3 +
 gcc/testsuite/rust/compile/canonical_paths1.rs     |  3 +
 gcc/testsuite/rust/compile/cast_generics.rs        |  3 +
 gcc/testsuite/rust/compile/closure_no_type_anno.rs |  3 +
 .../rust/compile/complex_qualified_path_in_expr.rs |  5 +-
 gcc/testsuite/rust/compile/const-issue1440.rs      |  3 +
 gcc/testsuite/rust/compile/const_generics_1.rs     |  3 +
 gcc/testsuite/rust/compile/const_generics_8.rs     |  3 +
 gcc/testsuite/rust/compile/derive_macro1.rs        |  3 +
 gcc/testsuite/rust/compile/derive_macro3.rs        |  3 +
 gcc/testsuite/rust/compile/derive_macro4.rs        |  3 +
 gcc/testsuite/rust/compile/derive_macro6.rs        |  3 +
 gcc/testsuite/rust/compile/expected_type_args2.rs  |  3 +
 gcc/testsuite/rust/compile/expected_type_args3.rs  |  3 +
 gcc/testsuite/rust/compile/generics1.rs            |  3 +
 gcc/testsuite/rust/compile/generics11.rs           |  3 +
 gcc/testsuite/rust/compile/generics12.rs           |  3 +
 gcc/testsuite/rust/compile/generics2.rs            |  3 +
 gcc/testsuite/rust/compile/generics3.rs            |  3 +
 gcc/testsuite/rust/compile/generics4.rs            |  3 +
 gcc/testsuite/rust/compile/generics6.rs            |  3 +
 gcc/testsuite/rust/compile/generics7.rs            |  3 +
 gcc/testsuite/rust/compile/generics8.rs            |  3 +
 gcc/testsuite/rust/compile/if_let_expr.rs          |  3 +
 gcc/testsuite/rust/compile/issue-1005.rs           |  3 +
 gcc/testsuite/rust/compile/issue-1019.rs           |  3 +
 gcc/testsuite/rust/compile/issue-1031.rs           |  3 +
 gcc/testsuite/rust/compile/issue-1034.rs           |  3 +
 gcc/testsuite/rust/compile/issue-1128.rs           |  3 +
 gcc/testsuite/rust/compile/issue-1129-2.rs         |  3 +
 gcc/testsuite/rust/compile/issue-1130.rs           |  3 +
 gcc/testsuite/rust/compile/issue-1131.rs           |  3 +
 gcc/testsuite/rust/compile/issue-1165.rs           |  3 +
 gcc/testsuite/rust/compile/issue-1173.rs           |  3 +
 gcc/testsuite/rust/compile/issue-1235.rs           |  3 +
 gcc/testsuite/rust/compile/issue-1237.rs           |  3 +
 gcc/testsuite/rust/compile/issue-1289.rs           |  3 +
 gcc/testsuite/rust/compile/issue-1383.rs           |  3 +
 gcc/testsuite/rust/compile/issue-1447.rs           |  3 +
 gcc/testsuite/rust/compile/issue-1589.rs           |  3 +
 gcc/testsuite/rust/compile/issue-1725-1.rs         |  3 +
 gcc/testsuite/rust/compile/issue-1725-2.rs         |  3 +
 gcc/testsuite/rust/compile/issue-1773.rs           |  3 +
 gcc/testsuite/rust/compile/issue-1786.rs           |  3 +
 gcc/testsuite/rust/compile/issue-1893.rs           |  3 +
 gcc/testsuite/rust/compile/issue-1901.rs           |  3 +
 gcc/testsuite/rust/compile/issue-1930.rs           |  3 +
 gcc/testsuite/rust/compile/issue-1981.rs           |  3 +
 gcc/testsuite/rust/compile/issue-2019-1.rs         |  3 +
 gcc/testsuite/rust/compile/issue-2019-2.rs         |  3 +
 gcc/testsuite/rust/compile/issue-2019-3.rs         |  3 +
 gcc/testsuite/rust/compile/issue-2036.rs           |  3 +
 gcc/testsuite/rust/compile/issue-2037.rs           |  3 +
 gcc/testsuite/rust/compile/issue-2070.rs           |  3 +
 gcc/testsuite/rust/compile/issue-2105.rs           |  3 +
 gcc/testsuite/rust/compile/issue-2106.rs           |  3 +
 gcc/testsuite/rust/compile/issue-2135.rs           |  3 +
 gcc/testsuite/rust/compile/issue-2136-1.rs         |  3 +
 gcc/testsuite/rust/compile/issue-2136-2.rs         |  3 +
 gcc/testsuite/rust/compile/issue-2139.rs           |  3 +
 gcc/testsuite/rust/compile/issue-2142.rs           |  3 +
 gcc/testsuite/rust/compile/issue-2165.rs           |  3 +
 gcc/testsuite/rust/compile/issue-2166.rs           |  3 +
 gcc/testsuite/rust/compile/issue-2190-1.rs         |  3 +
 gcc/testsuite/rust/compile/issue-2190-2.rs         |  3 +
 gcc/testsuite/rust/compile/issue-2195.rs           |  3 +
 gcc/testsuite/rust/compile/issue-2238.rs           |  3 +
 gcc/testsuite/rust/compile/issue-2304.rs           |  3 +
 gcc/testsuite/rust/compile/issue-2375.rs           | 14 +++++
 gcc/testsuite/rust/compile/issue-850.rs            |  3 +
 gcc/testsuite/rust/compile/issue-855.rs            |  3 +
 gcc/testsuite/rust/compile/issue-925.rs            |  3 +
 gcc/testsuite/rust/compile/macro-issue1400.rs      |  3 +
 gcc/testsuite/rust/compile/macro20.rs              |  3 +
 gcc/testsuite/rust/compile/macro23.rs              |  3 +
 gcc/testsuite/rust/compile/macro40.rs              |  3 +
 gcc/testsuite/rust/compile/macro54.rs              |  3 +
 gcc/testsuite/rust/compile/name_resolution2.rs     |  3 +
 gcc/testsuite/rust/compile/name_resolution4.rs     |  3 +
 gcc/testsuite/rust/compile/nested_generic.rs       |  3 +
 .../parse_associated_type_as_generic_arg.rs        |  3 +
 .../parse_associated_type_as_generic_arg2.rs       |  3 +
 .../parse_associated_type_as_generic_arg3.rs       |  3 +
 .../compile/parse_complex_generic_application.rs   |  3 +
 .../compile/parse_complex_generic_application2.rs  |  3 +
 gcc/testsuite/rust/compile/path_as_generic_arg.rs  |  3 +
 gcc/testsuite/rust/compile/privacy4.rs             |  3 +
 gcc/testsuite/rust/compile/privacy6.rs             |  3 +
 .../rust/compile/sizeof-stray-infer-var-bug.rs     |  3 +
 gcc/testsuite/rust/compile/stmt_with_block_dot.rs  |  3 +
 .../rust/compile/torture/associated_types1.rs      |  3 +
 .../rust/compile/torture/forward_decl_5.rs         |  3 +
 gcc/testsuite/rust/compile/torture/generics1.rs    |  3 +
 gcc/testsuite/rust/compile/torture/generics10.rs   |  3 +
 gcc/testsuite/rust/compile/torture/generics11.rs   |  3 +
 gcc/testsuite/rust/compile/torture/generics12.rs   |  3 +
 gcc/testsuite/rust/compile/torture/generics13.rs   |  3 +
 gcc/testsuite/rust/compile/torture/generics14.rs   |  3 +
 gcc/testsuite/rust/compile/torture/generics15.rs   |  3 +
 gcc/testsuite/rust/compile/torture/generics16.rs   |  3 +
 gcc/testsuite/rust/compile/torture/generics17.rs   |  3 +
 gcc/testsuite/rust/compile/torture/generics18.rs   |  3 +
 gcc/testsuite/rust/compile/torture/generics19.rs   |  3 +
 gcc/testsuite/rust/compile/torture/generics2.rs    |  3 +
 gcc/testsuite/rust/compile/torture/generics20.rs   |  3 +
 gcc/testsuite/rust/compile/torture/generics21.rs   |  3 +
 gcc/testsuite/rust/compile/torture/generics22.rs   |  3 +
 gcc/testsuite/rust/compile/torture/generics23.rs   |  3 +
 gcc/testsuite/rust/compile/torture/generics24.rs   |  3 +
 gcc/testsuite/rust/compile/torture/generics25.rs   |  3 +
 gcc/testsuite/rust/compile/torture/generics26.rs   |  3 +
 gcc/testsuite/rust/compile/torture/generics27.rs   |  3 +
 gcc/testsuite/rust/compile/torture/generics28.rs   |  3 +
 gcc/testsuite/rust/compile/torture/generics29.rs   |  3 +
 gcc/testsuite/rust/compile/torture/generics3.rs    |  3 +
 gcc/testsuite/rust/compile/torture/generics30.rs   |  3 +
 gcc/testsuite/rust/compile/torture/generics31.rs   |  3 +
 gcc/testsuite/rust/compile/torture/generics32.rs   |  3 +
 gcc/testsuite/rust/compile/torture/generics4.rs    |  3 +
 gcc/testsuite/rust/compile/torture/generics5.rs    |  3 +
 gcc/testsuite/rust/compile/torture/generics6.rs    |  3 +
 gcc/testsuite/rust/compile/torture/generics7.rs    |  3 +
 gcc/testsuite/rust/compile/torture/generics8.rs    |  3 +
 gcc/testsuite/rust/compile/torture/generics9.rs    |  3 +
 gcc/testsuite/rust/compile/torture/intrinsics-2.rs |  3 +
 gcc/testsuite/rust/compile/torture/intrinsics-6.rs |  3 +
 gcc/testsuite/rust/compile/torture/intrinsics-7.rs |  3 +
 gcc/testsuite/rust/compile/torture/intrinsics-8.rs |  3 +
 gcc/testsuite/rust/compile/torture/issue-1024.rs   |  3 +
 gcc/testsuite/rust/compile/torture/issue-1075.rs   |  3 +
 gcc/testsuite/rust/compile/torture/issue-1432.rs   |  4 ++
 gcc/testsuite/rust/compile/torture/issue-1555.rs   |  3 +
 gcc/testsuite/rust/compile/torture/issue-368.rs    |  3 +
 gcc/testsuite/rust/compile/torture/issue-808.rs    |  3 +
 gcc/testsuite/rust/compile/torture/issue-862.rs    |  4 ++
 gcc/testsuite/rust/compile/torture/issue-893-2.rs  |  3 +
 gcc/testsuite/rust/compile/torture/issue-893.rs    |  3 +
 gcc/testsuite/rust/compile/torture/must_use2.rs    |  3 +
 gcc/testsuite/rust/compile/torture/nested_fn2.rs   |  3 +
 gcc/testsuite/rust/compile/torture/phantom_data.rs |  3 +
 .../rust/compile/torture/range-lang-item1.rs       |  3 +
 gcc/testsuite/rust/compile/torture/traits1.rs      |  3 +
 gcc/testsuite/rust/compile/torture/traits11.rs     |  3 +
 gcc/testsuite/rust/compile/torture/traits12.rs     |  3 +
 gcc/testsuite/rust/compile/torture/traits13.rs     |  3 +
 gcc/testsuite/rust/compile/torture/traits14.rs     |  3 +
 gcc/testsuite/rust/compile/torture/traits15.rs     |  3 +
 gcc/testsuite/rust/compile/torture/traits16.rs     |  3 +
 gcc/testsuite/rust/compile/torture/traits17.rs     |  3 +
 gcc/testsuite/rust/compile/torture/traits18.rs     |  3 +
 gcc/testsuite/rust/compile/torture/traits19.rs     |  3 +
 gcc/testsuite/rust/compile/torture/traits2.rs      |  3 +
 gcc/testsuite/rust/compile/torture/traits3.rs      |  3 +
 gcc/testsuite/rust/compile/torture/traits4.rs      |  3 +
 gcc/testsuite/rust/compile/torture/traits5.rs      |  3 +
 gcc/testsuite/rust/compile/torture/traits6.rs      |  3 +
 gcc/testsuite/rust/compile/torture/traits7.rs      |  3 +
 gcc/testsuite/rust/compile/torture/traits8.rs      |  3 +
 gcc/testsuite/rust/compile/torture/traits9.rs      |  3 +
 .../rust/compile/torture/transmute-size-check-1.rs |  3 +
 gcc/testsuite/rust/compile/torture/transmute1.rs   |  3 +
 .../rust/compile/torture/uninit-intrinsic-1.rs     |  3 +
 .../rust/compile/torture/utf8_identifiers.rs       |  3 +
 gcc/testsuite/rust/compile/traits1.rs              |  3 +
 gcc/testsuite/rust/compile/traits10.rs             |  3 +
 gcc/testsuite/rust/compile/traits11.rs             |  3 +
 gcc/testsuite/rust/compile/traits12.rs             |  3 +
 gcc/testsuite/rust/compile/traits2.rs              |  3 +
 gcc/testsuite/rust/compile/traits3.rs              |  3 +
 gcc/testsuite/rust/compile/traits4.rs              |  3 +
 gcc/testsuite/rust/compile/traits5.rs              |  3 +
 gcc/testsuite/rust/compile/traits6.rs              |  3 +
 gcc/testsuite/rust/compile/traits7.rs              |  3 +
 gcc/testsuite/rust/compile/traits8.rs              |  3 +
 gcc/testsuite/rust/compile/traits9.rs              |  3 +
 gcc/testsuite/rust/compile/type-bindings1.rs       |  3 +
 .../rust/compile/unconstrained_type_param.rs       |  3 +
 gcc/testsuite/rust/compile/unsafe10.rs             |  3 +
 gcc/testsuite/rust/execute/torture/closure1.rs     |  3 +
 gcc/testsuite/rust/execute/torture/closure2.rs     |  3 +
 gcc/testsuite/rust/execute/torture/closure3.rs     |  3 +
 gcc/testsuite/rust/execute/torture/closure4.rs     |  3 +
 gcc/testsuite/rust/execute/torture/coercion1.rs    |  3 +
 gcc/testsuite/rust/execute/torture/coercion2.rs    |  3 +
 gcc/testsuite/rust/execute/torture/coercion3.rs    |  3 +
 .../rust/execute/torture/copy_nonoverlapping1.rs   |  4 +-
 .../rust/execute/torture/derive_macro1.rs          |  3 +
 .../rust/execute/torture/derive_macro3.rs          |  3 +
 .../rust/execute/torture/derive_macro4.rs          |  5 +-
 gcc/testsuite/rust/execute/torture/index1.rs       |  3 +
 gcc/testsuite/rust/execute/torture/issue-1120.rs   |  3 +
 gcc/testsuite/rust/execute/torture/issue-1133.rs   |  3 +
 gcc/testsuite/rust/execute/torture/issue-1198.rs   |  3 +
 gcc/testsuite/rust/execute/torture/issue-1232.rs   |  3 +
 gcc/testsuite/rust/execute/torture/issue-1249.rs   |  3 +
 gcc/testsuite/rust/execute/torture/issue-1436.rs   |  3 +
 gcc/testsuite/rust/execute/torture/issue-1496.rs   |  3 +
 gcc/testsuite/rust/execute/torture/issue-1720-2.rs |  3 +
 gcc/testsuite/rust/execute/torture/issue-1720.rs   |  3 +
 gcc/testsuite/rust/execute/torture/issue-2052.rs   |  3 +
 gcc/testsuite/rust/execute/torture/issue-2179.rs   |  3 +
 gcc/testsuite/rust/execute/torture/issue-2180.rs   |  3 +
 gcc/testsuite/rust/execute/torture/issue-2236.rs   |  3 +
 gcc/testsuite/rust/execute/torture/issue-647.rs    |  3 +
 gcc/testsuite/rust/execute/torture/issue-845.rs    |  3 +
 gcc/testsuite/rust/execute/torture/issue-851.rs    |  3 +
 gcc/testsuite/rust/execute/torture/issue-858.rs    |  3 +
 gcc/testsuite/rust/execute/torture/macros23.rs     |  3 +
 gcc/testsuite/rust/execute/torture/macros28.rs     |  3 +
 gcc/testsuite/rust/execute/torture/method2.rs      |  3 +
 gcc/testsuite/rust/execute/torture/method3.rs      |  3 +
 gcc/testsuite/rust/execute/torture/method4.rs      |  3 +
 .../rust/execute/torture/operator_overload_1.rs    |  3 +
 .../rust/execute/torture/operator_overload_10.rs   |  3 +
 .../rust/execute/torture/operator_overload_11.rs   |  3 +
 .../rust/execute/torture/operator_overload_12.rs   |  3 +
 .../rust/execute/torture/operator_overload_2.rs    |  3 +
 .../rust/execute/torture/operator_overload_3.rs    |  3 +
 .../rust/execute/torture/operator_overload_4.rs    |  3 +
 .../rust/execute/torture/operator_overload_5.rs    |  3 +
 .../rust/execute/torture/operator_overload_6.rs    |  3 +
 .../rust/execute/torture/operator_overload_7.rs    |  3 +
 .../rust/execute/torture/operator_overload_8.rs    |  3 +
 .../rust/execute/torture/operator_overload_9.rs    |  3 +
 .../rust/execute/torture/prefetch_data.rs          |  3 +
 gcc/testsuite/rust/execute/torture/ref-pattern2.rs |  3 +
 gcc/testsuite/rust/execute/torture/slice-magic.rs  |  3 +
 gcc/testsuite/rust/execute/torture/slice-magic2.rs |  3 +
 gcc/testsuite/rust/execute/torture/slice1.rs       |  3 +
 gcc/testsuite/rust/execute/torture/str-layout1.rs  |  3 +
 gcc/testsuite/rust/execute/torture/trait1.rs       |  3 +
 gcc/testsuite/rust/execute/torture/trait10.rs      |  3 +
 gcc/testsuite/rust/execute/torture/trait11.rs      |  3 +
 gcc/testsuite/rust/execute/torture/trait12.rs      |  3 +
 gcc/testsuite/rust/execute/torture/trait13.rs      |  3 +
 gcc/testsuite/rust/execute/torture/trait2.rs       |  3 +
 gcc/testsuite/rust/execute/torture/trait3.rs       |  3 +
 gcc/testsuite/rust/execute/torture/trait4.rs       |  3 +
 gcc/testsuite/rust/execute/torture/trait5.rs       |  3 +
 gcc/testsuite/rust/execute/torture/trait6.rs       |  3 +
 gcc/testsuite/rust/execute/torture/trait7.rs       |  3 +
 gcc/testsuite/rust/execute/torture/trait8.rs       |  3 +
 gcc/testsuite/rust/execute/torture/trait9.rs       |  3 +
 gcc/testsuite/rust/execute/torture/transmute1.rs   |  3 +
 gcc/testsuite/rust/execute/torture/wrapping_op1.rs |  3 +
 gcc/testsuite/rust/execute/torture/wrapping_op2.rs |  3 +
 gcc/testsuite/rust/link/generic_function_0.rs      |  3 +
 gcc/testsuite/rust/link/generic_function_1.rs      |  3 +
 263 files changed, 925 insertions(+), 55 deletions(-)

diff --git a/gcc/rust/expand/rust-proc-macro.cc b/gcc/rust/expand/rust-proc-macro.cc
index e9e79181646..541a0100ea8 100644
--- a/gcc/rust/expand/rust-proc-macro.cc
+++ b/gcc/rust/expand/rust-proc-macro.cc
@@ -31,7 +31,7 @@ namespace {
 ProcMacro::Literal
 literal_from_string (const std::string &data, bool &error)
 {
-  Lexer lex (data);
+  Lexer lex (data, nullptr);
   const_TokenPtr output = lex.build_token ();
   if (output == nullptr || !output->is_literal ())
     {
@@ -48,7 +48,7 @@ ProcMacro::TokenStream
 tokenstream_from_string (std::string &data, bool &lex_error)
 {
   // FIXME: Insert location pointing to call site in tokens
-  Lexer lex (data);
+  Lexer lex (data, nullptr);
 
   std::vector<const_TokenPtr> tokens;
   TokenPtr ptr;
diff --git a/gcc/rust/lex/rust-lex.cc b/gcc/rust/lex/rust-lex.cc
index 8c575a7cc1c..7eb9142322e 100644
--- a/gcc/rust/lex/rust-lex.cc
+++ b/gcc/rust/lex/rust-lex.cc
@@ -136,9 +136,9 @@ is_identifier_continue (uint32_t codepoint)
   return cpp_check_xid_property (codepoint) & CPP_XID_CONTINUE;
 }
 
-Lexer::Lexer (const std::string &input)
+Lexer::Lexer (const std::string &input, Linemap *linemap)
   : input (RAIIFile::create_error ()), current_line (1), current_column (1),
-    line_map (nullptr), dump_lex_out ({}),
+    line_map (linemap), dump_lex_out ({}),
     raw_input_source (new BufferInputSource (input, 0)),
     input_queue{*raw_input_source}, token_queue (TokenSource (this))
 {}
diff --git a/gcc/rust/lex/rust-lex.h b/gcc/rust/lex/rust-lex.h
index e85b5629a62..27286ac2877 100644
--- a/gcc/rust/lex/rust-lex.h
+++ b/gcc/rust/lex/rust-lex.h
@@ -161,7 +161,7 @@ public:
 	 tl::optional<std::ofstream &> dump_lex_opt = tl::nullopt);
 
   // Lex the contents of a string instead of a file
-  Lexer (const std::string &input);
+  Lexer (const std::string &input, Linemap *linemap);
 
   // dtor
   ~Lexer ();
diff --git a/gcc/rust/parse/rust-cfg-parser.cc b/gcc/rust/parse/rust-cfg-parser.cc
index 0a62dd11ede..f8593998527 100644
--- a/gcc/rust/parse/rust-cfg-parser.cc
+++ b/gcc/rust/parse/rust-cfg-parser.cc
@@ -27,7 +27,7 @@ parse_cfg_option (std::string &input, std::string &key, std::string &value)
   key.clear ();
   value.clear ();
 
-  auto lexer = Lexer (input);
+  auto lexer = Lexer (input, nullptr);
   auto parser = Parser<Lexer> (lexer);
 
   auto token = parser.peek_current_token ();
diff --git a/gcc/rust/rust-session-manager.cc b/gcc/rust/rust-session-manager.cc
index ee7dd0830e3..4f779d17077 100644
--- a/gcc/rust/rust-session-manager.cc
+++ b/gcc/rust/rust-session-manager.cc
@@ -1021,7 +1021,7 @@ Session::load_extern_crate (const std::string &crate_name, location_t locus)
   mappings->set_current_crate (crate_num);
 
   // then lets parse this as a 2nd crate
-  Lexer lex (extern_crate.get_metadata ());
+  Lexer lex (extern_crate.get_metadata (), linemap);
   Parser<Lexer> parser (lex);
   std::unique_ptr<AST::Crate> metadata_crate = parser.parse_crate ();
 
diff --git a/gcc/rust/typecheck/rust-hir-trait-resolve.cc b/gcc/rust/typecheck/rust-hir-trait-resolve.cc
index f2dd191a04a..17827753198 100644
--- a/gcc/rust/typecheck/rust-hir-trait-resolve.cc
+++ b/gcc/rust/typecheck/rust-hir-trait-resolve.cc
@@ -164,8 +164,8 @@ TraitResolver::resolve_trait (HIR::Trait *trait_reference)
   TyTy::BaseType *self = nullptr;
   std::vector<TyTy::SubstitutionParamMapping> substitutions;
 
-  // FIXME
-  // this should use the resolve_generic_params like everywhere else
+  // this needs to be special cased for the sized trait to not auto implemented
+  // Sized on Self
   for (auto &generic_param : trait_reference->get_generic_params ())
     {
       switch (generic_param.get ()->get_kind ())
@@ -177,16 +177,22 @@ TraitResolver::resolve_trait (HIR::Trait *trait_reference)
 	  break;
 
 	  case HIR::GenericParam::GenericKind::TYPE: {
+	    auto &typaram = static_cast<HIR::TypeParam &> (*generic_param);
+	    bool is_self
+	      = typaram.get_type_representation ().as_string ().compare ("Self")
+		== 0;
+
+	    // https://doc.rust-lang.org/std/marker/trait.Sized.html
+	    // The one exception is the implicit Self type of a trait
+	    bool apply_sized = !is_self;
 	    auto param_type
-	      = TypeResolveGenericParam::Resolve (generic_param.get ());
+	      = TypeResolveGenericParam::Resolve (generic_param.get (),
+						  apply_sized);
 	    context->insert_type (generic_param->get_mappings (), param_type);
-
-	    auto &typaram = static_cast<HIR::TypeParam &> (*generic_param);
 	    substitutions.push_back (
 	      TyTy::SubstitutionParamMapping (typaram, param_type));
 
-	    if (typaram.get_type_representation ().as_string ().compare ("Self")
-		== 0)
+	    if (is_self)
 	      {
 		rust_assert (param_type->get_kind () == TyTy::TypeKind::PARAM);
 		TyTy::ParamType *p
diff --git a/gcc/rust/typecheck/rust-hir-type-check-base.cc b/gcc/rust/typecheck/rust-hir-type-check-base.cc
index ae433e859ac..ac9d0e9ea24 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-base.cc
+++ b/gcc/rust/typecheck/rust-hir-type-check-base.cc
@@ -19,6 +19,7 @@
 #include "rust-hir-type-check-base.h"
 #include "rust-hir-type-check-expr.h"
 #include "rust-hir-type-check-type.h"
+#include "rust-hir-trait-resolve.h"
 #include "rust-type-util.h"
 
 namespace Rust {
@@ -399,5 +400,21 @@ TypeCheckBase::resolve_generic_params (
     }
 }
 
+TyTy::TypeBoundPredicate
+TypeCheckBase::get_marker_predicate (Analysis::RustLangItem::ItemType item_type,
+				     location_t locus)
+{
+  DefId item_id = mappings->get_lang_item (item_type, locus);
+  HIR::Item *item = mappings->lookup_defid (item_id);
+  rust_assert (item != nullptr);
+  rust_assert (item->get_item_kind () == HIR::Item::ItemKind::Trait);
+
+  HIR::Trait &trait = *static_cast<HIR::Trait *> (item);
+  TraitReference *ref = TraitResolver::Resolve (trait);
+  rust_assert (ref != nullptr);
+
+  return TyTy::TypeBoundPredicate (*ref, BoundPolarity::RegularBound, locus);
+}
+
 } // namespace Resolver
 } // namespace Rust
diff --git a/gcc/rust/typecheck/rust-hir-type-check-base.h b/gcc/rust/typecheck/rust-hir-type-check-base.h
index 0cbcefe9d6c..0491e0fe175 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-base.h
+++ b/gcc/rust/typecheck/rust-hir-type-check-base.h
@@ -38,7 +38,9 @@ protected:
   TraitReference *resolve_trait_path (HIR::TypePath &);
 
   TyTy::TypeBoundPredicate
-  get_predicate_from_bound (HIR::TypePath &path, HIR::Type *associated_self);
+  get_predicate_from_bound (HIR::TypePath &path, HIR::Type *associated_self,
+			    BoundPolarity polarity
+			    = BoundPolarity::RegularBound);
 
   bool check_for_unconstrained (
     const std::vector<TyTy::SubstitutionParamMapping> &params_to_constrain,
@@ -56,6 +58,10 @@ protected:
     const std::vector<std::unique_ptr<HIR::GenericParam> > &generic_params,
     std::vector<TyTy::SubstitutionParamMapping> &substitutions);
 
+  TyTy::TypeBoundPredicate
+  get_marker_predicate (Analysis::RustLangItem::ItemType item_type,
+			location_t locus);
+
   Analysis::Mappings *mappings;
   Resolver *resolver;
   TypeCheckContext *context;
diff --git a/gcc/rust/typecheck/rust-hir-type-check-type.cc b/gcc/rust/typecheck/rust-hir-type-check-type.cc
index c3bc14b0989..03ee74aeb10 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-type.cc
+++ b/gcc/rust/typecheck/rust-hir-type-check-type.cc
@@ -673,9 +673,9 @@ TypeCheckType::visit (HIR::NeverType &type)
 }
 
 TyTy::ParamType *
-TypeResolveGenericParam::Resolve (HIR::GenericParam *param)
+TypeResolveGenericParam::Resolve (HIR::GenericParam *param, bool apply_sized)
 {
-  TypeResolveGenericParam resolver;
+  TypeResolveGenericParam resolver (apply_sized);
   switch (param->get_kind ())
     {
     case HIR::GenericParam::GenericKind::TYPE:
@@ -733,8 +733,26 @@ TypeResolveGenericParam::visit (HIR::TypeParam &param)
 	= new HIR::TypePath (mappings, {}, BUILTINS_LOCATION, false);
     }
 
+  std::map<DefId, std::vector<TyTy::TypeBoundPredicate>> predicates;
+
+  // https://doc.rust-lang.org/std/marker/trait.Sized.html
+  // All type parameters have an implicit bound of Sized. The special syntax
+  // ?Sized can be used to remove this bound if it’s not appropriate.
+  //
+  // We can only do this when we are not resolving the implicit Self for Sized
+  // itself
+  rust_debug_loc (param.get_locus (), "apply_sized: %s",
+		  apply_sized ? "true" : "false");
+  if (apply_sized)
+    {
+      TyTy::TypeBoundPredicate sized_predicate
+	= get_marker_predicate (Analysis::RustLangItem::ItemType::SIZED,
+				param.get_locus ());
+
+      predicates[sized_predicate.get_id ()] = {sized_predicate};
+    }
+
   // resolve the bounds
-  std::vector<TyTy::TypeBoundPredicate> specified_bounds;
   if (param.has_type_param_bounds ())
     {
       for (auto &bound : param.get_type_param_bounds ())
@@ -747,9 +765,40 @@ TypeResolveGenericParam::visit (HIR::TypeParam &param)
 
 		TyTy::TypeBoundPredicate predicate
 		  = get_predicate_from_bound (b->get_path (),
-					      implicit_self_bound);
+					      implicit_self_bound,
+					      b->get_polarity ());
 		if (!predicate.is_error ())
-		  specified_bounds.push_back (std::move (predicate));
+		  {
+		    switch (predicate.get_polarity ())
+		      {
+			case BoundPolarity::AntiBound: {
+			  bool found = predicates.find (predicate.get_id ())
+				       != predicates.end ();
+			  if (found)
+			    predicates.erase (predicate.get_id ());
+			  else
+			    {
+			      // emit error message
+			      rich_location r (line_table, b->get_locus ());
+			      r.add_range (predicate.get ()->get_locus ());
+			      rust_error_at (
+				r, "antibound for %s is not applied here",
+				predicate.get ()->get_name ().c_str ());
+			    }
+			}
+			break;
+
+			default: {
+			  if (predicates.find (predicate.get_id ())
+			      == predicates.end ())
+			    {
+			      predicates[predicate.get_id ()] = {};
+			    }
+			  predicates[predicate.get_id ()].push_back (predicate);
+			}
+			break;
+		      }
+		  }
 	      }
 	      break;
 
@@ -759,6 +808,16 @@ TypeResolveGenericParam::visit (HIR::TypeParam &param)
 	}
     }
 
+  // now to flat map the specified_bounds into the raw specified predicates
+  std::vector<TyTy::TypeBoundPredicate> specified_bounds;
+  for (auto it = predicates.begin (); it != predicates.end (); it++)
+    {
+      for (const auto &predicate : it->second)
+	{
+	  specified_bounds.push_back (predicate);
+	}
+    }
+
   resolved = new TyTy::ParamType (param.get_type_representation ().as_string (),
 				  param.get_locus (),
 				  param.get_mappings ().get_hirid (), param,
diff --git a/gcc/rust/typecheck/rust-hir-type-check-type.h b/gcc/rust/typecheck/rust-hir-type-check-type.h
index b9b129b0667..31b486958f4 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-type.h
+++ b/gcc/rust/typecheck/rust-hir-type-check-type.h
@@ -96,7 +96,8 @@ private:
 class TypeResolveGenericParam : public TypeCheckBase
 {
 public:
-  static TyTy::ParamType *Resolve (HIR::GenericParam *param);
+  static TyTy::ParamType *Resolve (HIR::GenericParam *param,
+				   bool apply_sized = true);
 
 protected:
   void visit (HIR::TypeParam &param);
@@ -104,9 +105,12 @@ protected:
   void visit (HIR::ConstGenericParam &param);
 
 private:
-  TypeResolveGenericParam () : TypeCheckBase (), resolved (nullptr) {}
+  TypeResolveGenericParam (bool apply_sized)
+    : TypeCheckBase (), resolved (nullptr), apply_sized (apply_sized)
+  {}
 
   TyTy::ParamType *resolved;
+  bool apply_sized;
 };
 
 class ResolveWhereClauseItem : public TypeCheckBase
diff --git a/gcc/rust/typecheck/rust-typecheck-context.cc b/gcc/rust/typecheck/rust-typecheck-context.cc
index 70622593bcd..46954683875 100644
--- a/gcc/rust/typecheck/rust-typecheck-context.cc
+++ b/gcc/rust/typecheck/rust-typecheck-context.cc
@@ -345,7 +345,6 @@ void
 TypeCheckContext::insert_autoderef_mappings (
   HirId id, std::vector<Adjustment> &&adjustments)
 {
-  rust_assert (autoderef_mappings.find (id) == autoderef_mappings.end ());
   autoderef_mappings.emplace (id, std::move (adjustments));
 }
 
@@ -365,8 +364,6 @@ void
 TypeCheckContext::insert_cast_autoderef_mappings (
   HirId id, std::vector<Adjustment> &&adjustments)
 {
-  rust_assert (cast_autoderef_mappings.find (id)
-	       == cast_autoderef_mappings.end ());
   cast_autoderef_mappings.emplace (id, std::move (adjustments));
 }
 
diff --git a/gcc/rust/typecheck/rust-tyty-bounds.cc b/gcc/rust/typecheck/rust-tyty-bounds.cc
index 5947c217707..6239a83f607 100644
--- a/gcc/rust/typecheck/rust-tyty-bounds.cc
+++ b/gcc/rust/typecheck/rust-tyty-bounds.cc
@@ -103,18 +103,22 @@ TypeBoundsProbe::assemble_sized_builtin ()
 {
   const TyTy::BaseType *raw = receiver->destructure ();
 
-  // does this thing actually implement sized?
+  // https://runrust.miraheze.org/wiki/Dynamically_Sized_Type
+  // everything is sized except for:
+  //
+  //   1. dyn traits
+  //   2. slices
+  //   3. str
+  //   4. ADT's which contain any of the above
+  //   t. tuples which contain any of the above
   switch (raw->get_kind ())
     {
-    case TyTy::ADT:
-    case TyTy::STR:
+    case TyTy::ARRAY:
     case TyTy::REF:
     case TyTy::POINTER:
     case TyTy::PARAM:
-    case TyTy::SLICE:
     case TyTy::FNDEF:
     case TyTy::FNPTR:
-    case TyTy::TUPLE:
     case TyTy::BOOL:
     case TyTy::CHAR:
     case TyTy::INT:
@@ -124,13 +128,21 @@ TypeBoundsProbe::assemble_sized_builtin ()
     case TyTy::ISIZE:
     case TyTy::CLOSURE:
     case TyTy::INFER:
-      assemble_builtin_candidate (Analysis::RustLangItem::SIZED);
-      break;
-
-    case TyTy::ARRAY:
     case TyTy::NEVER:
     case TyTy::PLACEHOLDER:
     case TyTy::PROJECTION:
+      assemble_builtin_candidate (Analysis::RustLangItem::SIZED);
+      break;
+
+      // FIXME str and slice need to be moved and test cases updated
+    case TyTy::SLICE:
+    case TyTy::STR:
+    case TyTy::ADT:
+    case TyTy::TUPLE:
+      // FIXME add extra checks
+      assemble_builtin_candidate (Analysis::RustLangItem::SIZED);
+      break;
+
     case TyTy::DYNAMIC:
     case TyTy::ERROR:
       break;
@@ -171,7 +183,8 @@ TypeCheckBase::resolve_trait_path (HIR::TypePath &path)
 
 TyTy::TypeBoundPredicate
 TypeCheckBase::get_predicate_from_bound (HIR::TypePath &type_path,
-					 HIR::Type *associated_self)
+					 HIR::Type *associated_self,
+					 BoundPolarity polarity)
 {
   TyTy::TypeBoundPredicate lookup = TyTy::TypeBoundPredicate::error ();
   bool already_resolved
@@ -184,8 +197,7 @@ TypeCheckBase::get_predicate_from_bound (HIR::TypePath &type_path,
   if (trait->is_error ())
     return TyTy::TypeBoundPredicate::error ();
 
-  TyTy::TypeBoundPredicate predicate (*trait, BoundPolarity::RegularBound,
-				      type_path.get_locus ());
+  TyTy::TypeBoundPredicate predicate (*trait, polarity, type_path.get_locus ());
   HIR::GenericArgs args
     = HIR::GenericArgs::create_empty (type_path.get_locus ());
 
@@ -234,7 +246,8 @@ TypeCheckBase::get_predicate_from_bound (HIR::TypePath &type_path,
 	TypeCheckType::Resolve (fn.get_return_type ().get ());
 
 	HIR::TraitItem *trait_item = mappings->lookup_trait_item_lang_item (
-	  Analysis::RustLangItem::ItemType::FN_ONCE_OUTPUT);
+	  Analysis::RustLangItem::ItemType::FN_ONCE_OUTPUT,
+	  final_seg->get_locus ());
 
 	std::vector<HIR::GenericArgsBinding> bindings;
 	location_t output_locus = fn.get_return_type ()->get_locus ();
@@ -609,10 +622,11 @@ TypeBoundPredicate::handle_substitions (
       TyTy::BaseType *type = it.second;
 
       TypeBoundPredicateItem item = lookup_associated_item (identifier);
-      rust_assert (!item.is_error ());
-
-      const auto item_ref = item.get_raw_item ();
-      item_ref->associated_type_set (type);
+      if (!item.is_error ())
+	{
+	  const auto item_ref = item.get_raw_item ();
+	  item_ref->associated_type_set (type);
+	}
     }
 
   // FIXME more error handling at some point
diff --git a/gcc/rust/util/rust-hir-map.cc b/gcc/rust/util/rust-hir-map.cc
index c50836cfd72..647c29f3b2e 100644
--- a/gcc/rust/util/rust-hir-map.cc
+++ b/gcc/rust/util/rust-hir-map.cc
@@ -1266,16 +1266,23 @@ Mappings::lookup_builtin_marker ()
   return builtinMarker;
 }
 
-HIR::TraitItem *
-Mappings::lookup_trait_item_lang_item (Analysis::RustLangItem::ItemType item)
+DefId
+Mappings::get_lang_item (RustLangItem::ItemType item_type, location_t locus)
 {
-  DefId trait_item_id = UNKNOWN_DEFID;
-  bool trait_item_lang_item_defined = lookup_lang_item (item, &trait_item_id);
+  DefId item = UNKNOWN_DEFID;
+  bool ok = lookup_lang_item (item_type, &item);
+  if (!ok)
+    rust_fatal_error (locus, "failed to find lang item %s",
+		      RustLangItem::ToString (item_type).c_str ());
 
-  // FIXME
-  // make this an error? what does rustc do when a lang item is not defined?
-  rust_assert (trait_item_lang_item_defined);
+  return item;
+}
 
+HIR::TraitItem *
+Mappings::lookup_trait_item_lang_item (Analysis::RustLangItem::ItemType item,
+				       location_t locus)
+{
+  DefId trait_item_id = get_lang_item (item, locus);
   return lookup_trait_item_defid (trait_item_id);
 }
 
diff --git a/gcc/rust/util/rust-hir-map.h b/gcc/rust/util/rust-hir-map.h
index b78d4c22974..f62885faee9 100644
--- a/gcc/rust/util/rust-hir-map.h
+++ b/gcc/rust/util/rust-hir-map.h
@@ -271,6 +271,9 @@ public:
     return true;
   }
 
+  // This will fatal_error when this lang item does not exist
+  DefId get_lang_item (RustLangItem::ItemType item_type, location_t locus);
+
   void insert_macro_def (AST::MacroRulesDefinition *macro);
 
   bool lookup_macro_def (NodeId id, AST::MacroRulesDefinition **def);
@@ -342,7 +345,8 @@ public:
   HIR::ImplBlock *lookup_builtin_marker ();
 
   HIR::TraitItem *
-  lookup_trait_item_lang_item (Analysis::RustLangItem::ItemType item);
+  lookup_trait_item_lang_item (Analysis::RustLangItem::ItemType item,
+			       location_t locus);
 
 private:
   Mappings ();
diff --git a/gcc/rust/util/rust-token-converter.cc b/gcc/rust/util/rust-token-converter.cc
index d9fb85caa83..67d073d5e15 100644
--- a/gcc/rust/util/rust-token-converter.cc
+++ b/gcc/rust/util/rust-token-converter.cc
@@ -279,7 +279,7 @@ from_ident (const ProcMacro::Ident &ident, std::vector<const_TokenPtr> &result)
   if (ident.is_raw)
     value = "r#" + value;
 
-  Lexer lexer (value);
+  Lexer lexer (value, nullptr);
   auto token = lexer.build_token ();
   token->set_locus (convert (ident.span));
   result.push_back (token);
@@ -349,7 +349,7 @@ from_punct (const ProcMacro::Punct &punct, std::vector<std::uint32_t> &acc,
     {
       // TODO: UTF-8 string
       std::string whole (acc.begin (), acc.end ());
-      auto lexer = Lexer (whole);
+      auto lexer = Lexer (whole, nullptr);
       auto token = lexer.build_token ();
       token->set_locus (convert (punct.span));
       result.push_back (token);
diff --git a/gcc/testsuite/rust/compile/bounds1.rs b/gcc/testsuite/rust/compile/bounds1.rs
index 1ace9fbbf30..a02e6f63eb9 100644
--- a/gcc/testsuite/rust/compile/bounds1.rs
+++ b/gcc/testsuite/rust/compile/bounds1.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 mod core {
     mod ops {
         #[lang = "add"]
diff --git a/gcc/testsuite/rust/compile/canonical_paths1.rs b/gcc/testsuite/rust/compile/canonical_paths1.rs
index 193e7b5b698..bd6f3b27547 100644
--- a/gcc/testsuite/rust/compile/canonical_paths1.rs
+++ b/gcc/testsuite/rust/compile/canonical_paths1.rs
@@ -1,4 +1,7 @@
 // { dg-additional-options "-w -fdump-tree-gimple -frust-crate=example" }
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo(i32);
 
 trait TR {
diff --git a/gcc/testsuite/rust/compile/cast_generics.rs b/gcc/testsuite/rust/compile/cast_generics.rs
index 7d185964e50..469fa942ea0 100644
--- a/gcc/testsuite/rust/compile/cast_generics.rs
+++ b/gcc/testsuite/rust/compile/cast_generics.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 fn test<T>(a: T) -> T {
   a
 }
diff --git a/gcc/testsuite/rust/compile/closure_no_type_anno.rs b/gcc/testsuite/rust/compile/closure_no_type_anno.rs
index ff2c8b88a8a..b647da7b595 100644
--- a/gcc/testsuite/rust/compile/closure_no_type_anno.rs
+++ b/gcc/testsuite/rust/compile/closure_no_type_anno.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "fn_once"]
 trait FnOnce<Args> {
   type Output;
diff --git a/gcc/testsuite/rust/compile/complex_qualified_path_in_expr.rs b/gcc/testsuite/rust/compile/complex_qualified_path_in_expr.rs
index 6244a6bf100..5036410aca5 100644
--- a/gcc/testsuite/rust/compile/complex_qualified_path_in_expr.rs
+++ b/gcc/testsuite/rust/compile/complex_qualified_path_in_expr.rs
@@ -1,4 +1,7 @@
-struct S; // { dg-warning "struct is never constructed" "" { target *-*-* } .-1 }
+#[lang = "sized"]
+pub trait Sized {}
+
+struct S; // { dg-warning "struct is never constructed" }
 impl S {
   fn f() -> i32 { return 0; }
   // { dg-warning "associated function is never used" "" { target *-*-* } .-1 }
diff --git a/gcc/testsuite/rust/compile/const-issue1440.rs b/gcc/testsuite/rust/compile/const-issue1440.rs
index 2529a1c0fa8..3a2989cc8d0 100644
--- a/gcc/testsuite/rust/compile/const-issue1440.rs
+++ b/gcc/testsuite/rust/compile/const-issue1440.rs
@@ -1,6 +1,9 @@
 // { dg-additional-options "-w" }
 #![feature(intrinsics)]
 
+#[lang = "sized"]
+pub trait Sized {}
+
 mod intrinsics {
     extern "rust-intrinsic" {
         pub fn wrapping_add<T>(a: T, b: T) -> T;
diff --git a/gcc/testsuite/rust/compile/const_generics_1.rs b/gcc/testsuite/rust/compile/const_generics_1.rs
index bcad8ee6a19..5d4ca64c81d 100644
--- a/gcc/testsuite/rust/compile/const_generics_1.rs
+++ b/gcc/testsuite/rust/compile/const_generics_1.rs
@@ -3,6 +3,9 @@
 // There are errors about unused generic parameters, but we can't handle that yet.
 // Still, this code is invalid Rust.
 
+#[lang = "sized"]
+pub trait Sized {}
+
 mod sain {
     struct Foo<const N: usize>;
     struct Bar<T, const N: usize>;
diff --git a/gcc/testsuite/rust/compile/const_generics_8.rs b/gcc/testsuite/rust/compile/const_generics_8.rs
index b0bb2624a2c..c7810830f46 100644
--- a/gcc/testsuite/rust/compile/const_generics_8.rs
+++ b/gcc/testsuite/rust/compile/const_generics_8.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Bidule<const N: i32 = 15> {}
 enum Bidoule<const N: i32 = 15> {}
 
diff --git a/gcc/testsuite/rust/compile/derive_macro1.rs b/gcc/testsuite/rust/compile/derive_macro1.rs
index 131822820b0..779aad78e11 100644
--- a/gcc/testsuite/rust/compile/derive_macro1.rs
+++ b/gcc/testsuite/rust/compile/derive_macro1.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Clone {
     fn clone(&self) -> Self;
 }
diff --git a/gcc/testsuite/rust/compile/derive_macro3.rs b/gcc/testsuite/rust/compile/derive_macro3.rs
index 35284d8fa3b..1c7d4737bfe 100644
--- a/gcc/testsuite/rust/compile/derive_macro3.rs
+++ b/gcc/testsuite/rust/compile/derive_macro3.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Clone {
     fn clone(&self) -> Self;
 }
diff --git a/gcc/testsuite/rust/compile/derive_macro4.rs b/gcc/testsuite/rust/compile/derive_macro4.rs
index 564555f896f..7802e8fd800 100644
--- a/gcc/testsuite/rust/compile/derive_macro4.rs
+++ b/gcc/testsuite/rust/compile/derive_macro4.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Copy {}
 pub trait Clone {
     fn clone(&self) -> Self;
diff --git a/gcc/testsuite/rust/compile/derive_macro6.rs b/gcc/testsuite/rust/compile/derive_macro6.rs
index 0254754f7ae..b7bf7a78acd 100644
--- a/gcc/testsuite/rust/compile/derive_macro6.rs
+++ b/gcc/testsuite/rust/compile/derive_macro6.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Copy {}
 pub trait Clone {
     fn clone(&self) -> Self;
diff --git a/gcc/testsuite/rust/compile/expected_type_args2.rs b/gcc/testsuite/rust/compile/expected_type_args2.rs
index 79454202aad..11a70bec6d4 100644
--- a/gcc/testsuite/rust/compile/expected_type_args2.rs
+++ b/gcc/testsuite/rust/compile/expected_type_args2.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A>(A);
 
 fn main() {
diff --git a/gcc/testsuite/rust/compile/expected_type_args3.rs b/gcc/testsuite/rust/compile/expected_type_args3.rs
index ba07239207a..7003f7abcf7 100644
--- a/gcc/testsuite/rust/compile/expected_type_args3.rs
+++ b/gcc/testsuite/rust/compile/expected_type_args3.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A>(A);
 
 impl Foo {
diff --git a/gcc/testsuite/rust/compile/generics1.rs b/gcc/testsuite/rust/compile/generics1.rs
index de1bbf5dafb..e9bdb3a2845 100644
--- a/gcc/testsuite/rust/compile/generics1.rs
+++ b/gcc/testsuite/rust/compile/generics1.rs
@@ -1,5 +1,8 @@
 // { dg-error "expected .i32. got .i8." "" { target *-*-* } 0 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 struct GenericStruct<T>(T, usize);
 
 fn main() {
diff --git a/gcc/testsuite/rust/compile/generics11.rs b/gcc/testsuite/rust/compile/generics11.rs
index 4d3b9e1777c..10b5880d5bc 100644
--- a/gcc/testsuite/rust/compile/generics11.rs
+++ b/gcc/testsuite/rust/compile/generics11.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<T>(T, bool);
 
 impl<T> Foo<T> {
diff --git a/gcc/testsuite/rust/compile/generics12.rs b/gcc/testsuite/rust/compile/generics12.rs
index f1ac8b0314b..b32f56679ca 100644
--- a/gcc/testsuite/rust/compile/generics12.rs
+++ b/gcc/testsuite/rust/compile/generics12.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 fn main() {
     bar();
     // { dg-error "type annotations needed" "" { target *-*-* } .-1 }
diff --git a/gcc/testsuite/rust/compile/generics2.rs b/gcc/testsuite/rust/compile/generics2.rs
index 5812b133038..fc203abc451 100644
--- a/gcc/testsuite/rust/compile/generics2.rs
+++ b/gcc/testsuite/rust/compile/generics2.rs
@@ -1,5 +1,8 @@
 // { dg-error "expected .i32. got .i8." "" { target *-*-* } 0 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 struct GenericStruct<T>(T, usize);
 
 fn main() {
diff --git a/gcc/testsuite/rust/compile/generics3.rs b/gcc/testsuite/rust/compile/generics3.rs
index 2d4210588fb..e28953c14f8 100644
--- a/gcc/testsuite/rust/compile/generics3.rs
+++ b/gcc/testsuite/rust/compile/generics3.rs
@@ -1,4 +1,7 @@
 // { dg-error "expected .i32. got .i8." "" { target *-*-* } 0 }
+#[lang = "sized"]
+pub trait Sized {}
+
 struct GenericStruct<T>(T, usize);
 
 fn main() {
diff --git a/gcc/testsuite/rust/compile/generics4.rs b/gcc/testsuite/rust/compile/generics4.rs
index e8fe23cd268..31b681abb10 100644
--- a/gcc/testsuite/rust/compile/generics4.rs
+++ b/gcc/testsuite/rust/compile/generics4.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct GenericStruct<T>(T, usize);
 
 fn main() {
diff --git a/gcc/testsuite/rust/compile/generics6.rs b/gcc/testsuite/rust/compile/generics6.rs
index ad5b682d0ba..00b93c33ebe 100644
--- a/gcc/testsuite/rust/compile/generics6.rs
+++ b/gcc/testsuite/rust/compile/generics6.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A> {
     a: A,
 }
diff --git a/gcc/testsuite/rust/compile/generics7.rs b/gcc/testsuite/rust/compile/generics7.rs
index aeb91a6fb41..f2cd607a330 100644
--- a/gcc/testsuite/rust/compile/generics7.rs
+++ b/gcc/testsuite/rust/compile/generics7.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A> {
     a: A,
 }
diff --git a/gcc/testsuite/rust/compile/generics8.rs b/gcc/testsuite/rust/compile/generics8.rs
index ceefc5d2c6a..99df0c9b58c 100644
--- a/gcc/testsuite/rust/compile/generics8.rs
+++ b/gcc/testsuite/rust/compile/generics8.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A, B>(A, B);
 
 impl<T> Foo<i32, T> {
diff --git a/gcc/testsuite/rust/compile/if_let_expr.rs b/gcc/testsuite/rust/compile/if_let_expr.rs
index ffa367b69c3..7bab19a1ef0 100644
--- a/gcc/testsuite/rust/compile/if_let_expr.rs
+++ b/gcc/testsuite/rust/compile/if_let_expr.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub enum Option<T> {
     None,
     Some(T),
diff --git a/gcc/testsuite/rust/compile/issue-1005.rs b/gcc/testsuite/rust/compile/issue-1005.rs
index 46c85eea91e..15d4bef08c2 100644
--- a/gcc/testsuite/rust/compile/issue-1005.rs
+++ b/gcc/testsuite/rust/compile/issue-1005.rs
@@ -1,4 +1,7 @@
 // { dg-additional-options "-w" }
+#[lang = "sized"]
+pub trait Sized {}
+
 impl<T> *const T {
     fn test(self) {}
 }
diff --git a/gcc/testsuite/rust/compile/issue-1019.rs b/gcc/testsuite/rust/compile/issue-1019.rs
index aea86a821c7..1f77ba9d31d 100644
--- a/gcc/testsuite/rust/compile/issue-1019.rs
+++ b/gcc/testsuite/rust/compile/issue-1019.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait A<T> {
     type Output;
 
diff --git a/gcc/testsuite/rust/compile/issue-1031.rs b/gcc/testsuite/rust/compile/issue-1031.rs
index a9049de96fb..cd1da47362a 100644
--- a/gcc/testsuite/rust/compile/issue-1031.rs
+++ b/gcc/testsuite/rust/compile/issue-1031.rs
@@ -1,5 +1,8 @@
 #![feature(intrinsics)]
 
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "rust-intrinsic" {
     #[rustc_const_stable(feature = "const_ptr_offset", since = "1.61.0")]
     pub fn offset<T>(dst: *const T, offset: isize) -> *const T;
diff --git a/gcc/testsuite/rust/compile/issue-1034.rs b/gcc/testsuite/rust/compile/issue-1034.rs
index 23d77005452..d40005ec5d9 100644
--- a/gcc/testsuite/rust/compile/issue-1034.rs
+++ b/gcc/testsuite/rust/compile/issue-1034.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo<T> {
     type Output;
 
diff --git a/gcc/testsuite/rust/compile/issue-1128.rs b/gcc/testsuite/rust/compile/issue-1128.rs
index 462426b679d..8960ebbea63 100644
--- a/gcc/testsuite/rust/compile/issue-1128.rs
+++ b/gcc/testsuite/rust/compile/issue-1128.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Hasher {
     fn write(&mut self, bytes: &[u8]);
     fn write_u8(&mut self, i: u8) {
diff --git a/gcc/testsuite/rust/compile/issue-1129-2.rs b/gcc/testsuite/rust/compile/issue-1129-2.rs
index 25d30faf4aa..cfe01b5b4db 100644
--- a/gcc/testsuite/rust/compile/issue-1129-2.rs
+++ b/gcc/testsuite/rust/compile/issue-1129-2.rs
@@ -1,4 +1,7 @@
 // { dg-additional-options "-w" }
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Hasher {
     fn finish(&self) -> u64;
     fn write(&mut self, bytes: &[u8]);
diff --git a/gcc/testsuite/rust/compile/issue-1130.rs b/gcc/testsuite/rust/compile/issue-1130.rs
index 6d265cb6044..115e6aad2f1 100644
--- a/gcc/testsuite/rust/compile/issue-1130.rs
+++ b/gcc/testsuite/rust/compile/issue-1130.rs
@@ -1,6 +1,9 @@
 // { dg-additional-options "-w" }
 #![feature(intrinsics)]
 
+#[lang = "sized"]
+pub trait Sized {}
+
 mod mem {
     extern "rust-intrinsic" {
         fn size_of<T>() -> usize;
diff --git a/gcc/testsuite/rust/compile/issue-1131.rs b/gcc/testsuite/rust/compile/issue-1131.rs
index 5cb9caf81f0..86eeb98453a 100644
--- a/gcc/testsuite/rust/compile/issue-1131.rs
+++ b/gcc/testsuite/rust/compile/issue-1131.rs
@@ -1,5 +1,8 @@
 #![feature(intrinsics)]
 
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "rust-intrinsic" {
     fn size_of<T>() -> usize;
     fn offset<T>(dst: *const T, offset: isize) -> *const T;
diff --git a/gcc/testsuite/rust/compile/issue-1165.rs b/gcc/testsuite/rust/compile/issue-1165.rs
index f5889698d70..a6378239519 100644
--- a/gcc/testsuite/rust/compile/issue-1165.rs
+++ b/gcc/testsuite/rust/compile/issue-1165.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<T>(T);
 
 fn main() {
diff --git a/gcc/testsuite/rust/compile/issue-1173.rs b/gcc/testsuite/rust/compile/issue-1173.rs
index 5c2a9173241..a8fd93eea1b 100644
--- a/gcc/testsuite/rust/compile/issue-1173.rs
+++ b/gcc/testsuite/rust/compile/issue-1173.rs
@@ -2,6 +2,9 @@
 
 #![feature(intrinsics)]
 
+#[lang = "sized"]
+pub trait Sized {}
+
 mod mem {
     extern "rust-intrinsic" {
         pub fn transmute<U, V>(_: U) -> V;
diff --git a/gcc/testsuite/rust/compile/issue-1235.rs b/gcc/testsuite/rust/compile/issue-1235.rs
index 098b337455f..7c85ac4a6b0 100644
--- a/gcc/testsuite/rust/compile/issue-1235.rs
+++ b/gcc/testsuite/rust/compile/issue-1235.rs
@@ -1,4 +1,7 @@
 // { dg-additional-options "-w" }
+#[lang = "sized"]
+pub trait Sized {}
+
 struct FatPtr<T> {
     data: *const T,
     len: usize,
diff --git a/gcc/testsuite/rust/compile/issue-1237.rs b/gcc/testsuite/rust/compile/issue-1237.rs
index 54a51df156f..79b60b07b52 100644
--- a/gcc/testsuite/rust/compile/issue-1237.rs
+++ b/gcc/testsuite/rust/compile/issue-1237.rs
@@ -1,6 +1,9 @@
 // { dg-additional-options "-w" }
 #![feature(intrinsics)]
 
+#[lang = "sized"]
+pub trait Sized {}
+
 mod intrinsics {
     extern "rust-intrinsic" {
         pub fn offset<T>(ptr: *const T, count: isize) -> *const T;
diff --git a/gcc/testsuite/rust/compile/issue-1289.rs b/gcc/testsuite/rust/compile/issue-1289.rs
index 3d7716a1d8c..9251d79290b 100644
--- a/gcc/testsuite/rust/compile/issue-1289.rs
+++ b/gcc/testsuite/rust/compile/issue-1289.rs
@@ -1,5 +1,8 @@
 #![feature(intrinsics)]
 
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "C" {
     fn printf(s: *const i8, ...);
 }
diff --git a/gcc/testsuite/rust/compile/issue-1383.rs b/gcc/testsuite/rust/compile/issue-1383.rs
index cca12e8fc71..dac4b2a1255 100644
--- a/gcc/testsuite/rust/compile/issue-1383.rs
+++ b/gcc/testsuite/rust/compile/issue-1383.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub fn generic_function<X>(a: X) -> X {
     a
 }
diff --git a/gcc/testsuite/rust/compile/issue-1447.rs b/gcc/testsuite/rust/compile/issue-1447.rs
index e0543e6247c..6d58f7a6eea 100644
--- a/gcc/testsuite/rust/compile/issue-1447.rs
+++ b/gcc/testsuite/rust/compile/issue-1447.rs
@@ -1,4 +1,7 @@
 // { dg-options "-w" }
+#[lang = "sized"]
+pub trait Sized {}
+
 struct PhantomData<T>;
 
 struct Hasher<S> {
diff --git a/gcc/testsuite/rust/compile/issue-1589.rs b/gcc/testsuite/rust/compile/issue-1589.rs
index 79a5866e4af..45f2415a813 100644
--- a/gcc/testsuite/rust/compile/issue-1589.rs
+++ b/gcc/testsuite/rust/compile/issue-1589.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait A: B {}
 // { dg-error "trait cycle detected" "" { target *-*-* } .-1 }
 
diff --git a/gcc/testsuite/rust/compile/issue-1725-1.rs b/gcc/testsuite/rust/compile/issue-1725-1.rs
index 1ace9fbbf30..a02e6f63eb9 100644
--- a/gcc/testsuite/rust/compile/issue-1725-1.rs
+++ b/gcc/testsuite/rust/compile/issue-1725-1.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 mod core {
     mod ops {
         #[lang = "add"]
diff --git a/gcc/testsuite/rust/compile/issue-1725-2.rs b/gcc/testsuite/rust/compile/issue-1725-2.rs
index 8bfd0bbd924..01ed287f545 100644
--- a/gcc/testsuite/rust/compile/issue-1725-2.rs
+++ b/gcc/testsuite/rust/compile/issue-1725-2.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 mod core {
     mod ops {
         #[lang = "add"]
diff --git a/gcc/testsuite/rust/compile/issue-1773.rs b/gcc/testsuite/rust/compile/issue-1773.rs
index c627ac09cec..a4542aea00b 100644
--- a/gcc/testsuite/rust/compile/issue-1773.rs
+++ b/gcc/testsuite/rust/compile/issue-1773.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo<T> {
     type A;
 
diff --git a/gcc/testsuite/rust/compile/issue-1786.rs b/gcc/testsuite/rust/compile/issue-1786.rs
index f73b63d0cb6..1c46fee6a87 100644
--- a/gcc/testsuite/rust/compile/issue-1786.rs
+++ b/gcc/testsuite/rust/compile/issue-1786.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "clone"]
 trait Clone {
     fn clone(&self) -> Self;
diff --git a/gcc/testsuite/rust/compile/issue-1893.rs b/gcc/testsuite/rust/compile/issue-1893.rs
index 6be1d6d6f29..46c53e9ce7a 100644
--- a/gcc/testsuite/rust/compile/issue-1893.rs
+++ b/gcc/testsuite/rust/compile/issue-1893.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub enum Option<T> {
     None,
     Some(T),
diff --git a/gcc/testsuite/rust/compile/issue-1901.rs b/gcc/testsuite/rust/compile/issue-1901.rs
index b2a70805e75..dd41ff89346 100644
--- a/gcc/testsuite/rust/compile/issue-1901.rs
+++ b/gcc/testsuite/rust/compile/issue-1901.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 mod intrinsics {
     extern "rust-intrinsic" {
         pub fn offset<T>(ptr: *const T, count: isize) -> *const T;
diff --git a/gcc/testsuite/rust/compile/issue-1930.rs b/gcc/testsuite/rust/compile/issue-1930.rs
index ab30ccc7da4..071b3dae21c 100644
--- a/gcc/testsuite/rust/compile/issue-1930.rs
+++ b/gcc/testsuite/rust/compile/issue-1930.rs
@@ -1,4 +1,7 @@
 // { dg-options "-w" }
+#[lang = "sized"]
+pub trait Sized {}
+
 fn test<T>(x: *mut T) {
     let x = x as *mut u8;
 }
diff --git a/gcc/testsuite/rust/compile/issue-1981.rs b/gcc/testsuite/rust/compile/issue-1981.rs
index 9ad2a55404f..b1637ac0260 100644
--- a/gcc/testsuite/rust/compile/issue-1981.rs
+++ b/gcc/testsuite/rust/compile/issue-1981.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 mod intrinsics {
     extern "rust-intrinsic" {
         pub fn offset<T>(ptr: *const T, count: isize) -> *const T;
diff --git a/gcc/testsuite/rust/compile/issue-2019-1.rs b/gcc/testsuite/rust/compile/issue-2019-1.rs
index f359ea4fb15..e91e347b2ea 100644
--- a/gcc/testsuite/rust/compile/issue-2019-1.rs
+++ b/gcc/testsuite/rust/compile/issue-2019-1.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "add"]
 pub trait Add<RHS = Self> {
     type Output;
diff --git a/gcc/testsuite/rust/compile/issue-2019-2.rs b/gcc/testsuite/rust/compile/issue-2019-2.rs
index 37c8e30b106..9f7c0c01bbe 100644
--- a/gcc/testsuite/rust/compile/issue-2019-2.rs
+++ b/gcc/testsuite/rust/compile/issue-2019-2.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "add"]
 pub trait Add<RHS = Self> {
     type Output;
diff --git a/gcc/testsuite/rust/compile/issue-2019-3.rs b/gcc/testsuite/rust/compile/issue-2019-3.rs
index 67890388be3..c95ce43083a 100644
--- a/gcc/testsuite/rust/compile/issue-2019-3.rs
+++ b/gcc/testsuite/rust/compile/issue-2019-3.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 macro_rules! forward_ref_binop {
     (impl $imp:ident, $method:ident for $t:ty, $u:ty) => {
         forward_ref_binop!(impl $imp, $method for $t, $u,
diff --git a/gcc/testsuite/rust/compile/issue-2036.rs b/gcc/testsuite/rust/compile/issue-2036.rs
index d1459752ea5..8701b204fd3 100644
--- a/gcc/testsuite/rust/compile/issue-2036.rs
+++ b/gcc/testsuite/rust/compile/issue-2036.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Hash<H> {
     fn hash2(&self, hasher: &H) -> u64;
 }
diff --git a/gcc/testsuite/rust/compile/issue-2037.rs b/gcc/testsuite/rust/compile/issue-2037.rs
index ec27a0d10dc..8adcb975109 100644
--- a/gcc/testsuite/rust/compile/issue-2037.rs
+++ b/gcc/testsuite/rust/compile/issue-2037.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     fn bar(&mut self, other: &mut Foo);
 }
diff --git a/gcc/testsuite/rust/compile/issue-2070.rs b/gcc/testsuite/rust/compile/issue-2070.rs
index 46f35209f4d..981e59926fb 100644
--- a/gcc/testsuite/rust/compile/issue-2070.rs
+++ b/gcc/testsuite/rust/compile/issue-2070.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     fn get(self) -> i32;
 }
diff --git a/gcc/testsuite/rust/compile/issue-2105.rs b/gcc/testsuite/rust/compile/issue-2105.rs
index 7d1c9a10c27..28f170e51cf 100644
--- a/gcc/testsuite/rust/compile/issue-2105.rs
+++ b/gcc/testsuite/rust/compile/issue-2105.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub enum Option<T> {
     Some(T),
     None,
diff --git a/gcc/testsuite/rust/compile/issue-2106.rs b/gcc/testsuite/rust/compile/issue-2106.rs
index a4f235c14dd..4af57c86652 100644
--- a/gcc/testsuite/rust/compile/issue-2106.rs
+++ b/gcc/testsuite/rust/compile/issue-2106.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo(u32);
 // { dg-warning "struct is never constructed" "" { target *-*-* } .-1 }
 
diff --git a/gcc/testsuite/rust/compile/issue-2135.rs b/gcc/testsuite/rust/compile/issue-2135.rs
index 563345efee3..9f4d3e1b6c1 100644
--- a/gcc/testsuite/rust/compile/issue-2135.rs
+++ b/gcc/testsuite/rust/compile/issue-2135.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Foo<A> {
     fn foo(self, _: A) -> u16;
 }
diff --git a/gcc/testsuite/rust/compile/issue-2136-1.rs b/gcc/testsuite/rust/compile/issue-2136-1.rs
index fcf1efcd171..f0af551f87e 100644
--- a/gcc/testsuite/rust/compile/issue-2136-1.rs
+++ b/gcc/testsuite/rust/compile/issue-2136-1.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Foo {
     fn foo();
 }
diff --git a/gcc/testsuite/rust/compile/issue-2136-2.rs b/gcc/testsuite/rust/compile/issue-2136-2.rs
index 7317f3f5151..b25820dadfb 100644
--- a/gcc/testsuite/rust/compile/issue-2136-2.rs
+++ b/gcc/testsuite/rust/compile/issue-2136-2.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct S;
 
 impl S {
diff --git a/gcc/testsuite/rust/compile/issue-2139.rs b/gcc/testsuite/rust/compile/issue-2139.rs
index 77bf78d13a7..3b9ad954679 100644
--- a/gcc/testsuite/rust/compile/issue-2139.rs
+++ b/gcc/testsuite/rust/compile/issue-2139.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Foo {
     fn foo();
 }
diff --git a/gcc/testsuite/rust/compile/issue-2142.rs b/gcc/testsuite/rust/compile/issue-2142.rs
index 7a8bb2aca50..a3ec228c0e1 100644
--- a/gcc/testsuite/rust/compile/issue-2142.rs
+++ b/gcc/testsuite/rust/compile/issue-2142.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "fn_once"]
 pub trait FnOnce<Args> {
     #[lang = "fn_once_output"]
diff --git a/gcc/testsuite/rust/compile/issue-2165.rs b/gcc/testsuite/rust/compile/issue-2165.rs
index 199bc13aa68..5bbde65928b 100644
--- a/gcc/testsuite/rust/compile/issue-2165.rs
+++ b/gcc/testsuite/rust/compile/issue-2165.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Alpha<T = Self> {
     type Beta;
 }
diff --git a/gcc/testsuite/rust/compile/issue-2166.rs b/gcc/testsuite/rust/compile/issue-2166.rs
index f333888879a..318f0a61b7e 100644
--- a/gcc/testsuite/rust/compile/issue-2166.rs
+++ b/gcc/testsuite/rust/compile/issue-2166.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Add {
     type Output;
 
diff --git a/gcc/testsuite/rust/compile/issue-2190-1.rs b/gcc/testsuite/rust/compile/issue-2190-1.rs
index 3e43e541049..057d7c71633 100644
--- a/gcc/testsuite/rust/compile/issue-2190-1.rs
+++ b/gcc/testsuite/rust/compile/issue-2190-1.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "deref"]
 trait Deref {
     type Target;
diff --git a/gcc/testsuite/rust/compile/issue-2190-2.rs b/gcc/testsuite/rust/compile/issue-2190-2.rs
index 48ab72b9200..1c933386aa4 100644
--- a/gcc/testsuite/rust/compile/issue-2190-2.rs
+++ b/gcc/testsuite/rust/compile/issue-2190-2.rs
@@ -1,4 +1,7 @@
 // { dg-options "-w" }
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "deref"]
 trait Deref {
     type Target;
diff --git a/gcc/testsuite/rust/compile/issue-2195.rs b/gcc/testsuite/rust/compile/issue-2195.rs
index c955df4f1c6..fc158c39bb4 100644
--- a/gcc/testsuite/rust/compile/issue-2195.rs
+++ b/gcc/testsuite/rust/compile/issue-2195.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct A<T> {
     // { dg-warning "struct is never constructed" "" { target *-*-* } .-1 }
     f: *const T,
diff --git a/gcc/testsuite/rust/compile/issue-2238.rs b/gcc/testsuite/rust/compile/issue-2238.rs
index b0c7e36ea44..38871b337c1 100644
--- a/gcc/testsuite/rust/compile/issue-2238.rs
+++ b/gcc/testsuite/rust/compile/issue-2238.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 fn main() {
     struct Foo;
 
diff --git a/gcc/testsuite/rust/compile/issue-2304.rs b/gcc/testsuite/rust/compile/issue-2304.rs
index 243cf100539..83130336ebe 100644
--- a/gcc/testsuite/rust/compile/issue-2304.rs
+++ b/gcc/testsuite/rust/compile/issue-2304.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "add"]
 pub trait Add<RHS = Self> {
     type Output;
diff --git a/gcc/testsuite/rust/compile/issue-2375.rs b/gcc/testsuite/rust/compile/issue-2375.rs
new file mode 100644
index 00000000000..a61fef8b618
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-2375.rs
@@ -0,0 +1,14 @@
+#[lang = "sized"]
+pub trait Sized {}
+
+pub trait Trait {
+    fn foo(&self) -> Self
+    where
+        Self: Sized;
+}
+
+pub fn static_foo<T: Trait + ?Sized>(_b: &T) {}
+
+pub fn dynamic_bar(a: &dyn Trait) {
+    static_foo(a)
+}
diff --git a/gcc/testsuite/rust/compile/issue-850.rs b/gcc/testsuite/rust/compile/issue-850.rs
index 531cbf4f663..e42b5573d1d 100644
--- a/gcc/testsuite/rust/compile/issue-850.rs
+++ b/gcc/testsuite/rust/compile/issue-850.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "C" {
     fn printf(s: *const i8, ...);
 }
diff --git a/gcc/testsuite/rust/compile/issue-855.rs b/gcc/testsuite/rust/compile/issue-855.rs
index f48e3a1bfe0..9e450ddda3a 100644
--- a/gcc/testsuite/rust/compile/issue-855.rs
+++ b/gcc/testsuite/rust/compile/issue-855.rs
@@ -1,5 +1,8 @@
 pub use result::Result::{self, Err, Ok};
 
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "C" {
     fn printf(s: *const i8, ...);
 }
diff --git a/gcc/testsuite/rust/compile/issue-925.rs b/gcc/testsuite/rust/compile/issue-925.rs
index 930b192c3d3..2d536a54725 100644
--- a/gcc/testsuite/rust/compile/issue-925.rs
+++ b/gcc/testsuite/rust/compile/issue-925.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct S;
 trait A {
     fn foo(&self);
diff --git a/gcc/testsuite/rust/compile/macro-issue1400.rs b/gcc/testsuite/rust/compile/macro-issue1400.rs
index 971bd778054..5c51b78065c 100644
--- a/gcc/testsuite/rust/compile/macro-issue1400.rs
+++ b/gcc/testsuite/rust/compile/macro-issue1400.rs
@@ -1,5 +1,8 @@
 // { dg-additional-options "-w" }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 macro_rules! foo {
     ( ( $( $Trait: ident ),+ ) for $Ty: ident ) => {
         $(
diff --git a/gcc/testsuite/rust/compile/macro20.rs b/gcc/testsuite/rust/compile/macro20.rs
index 9f3cbca012c..e03455b1b01 100644
--- a/gcc/testsuite/rust/compile/macro20.rs
+++ b/gcc/testsuite/rust/compile/macro20.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 macro_rules! define_trait {
     ($assoc:ident, $i:item) => {
         type $assoc;
diff --git a/gcc/testsuite/rust/compile/macro23.rs b/gcc/testsuite/rust/compile/macro23.rs
index afaca9bc96b..a6a2afdad07 100644
--- a/gcc/testsuite/rust/compile/macro23.rs
+++ b/gcc/testsuite/rust/compile/macro23.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 macro_rules! maybe_impl {
     ($left:ident, $right:ident, $l_fn:ident, $r_fn:ident) => {
         fn $l_fn(value: T) -> Maybe<T> {
diff --git a/gcc/testsuite/rust/compile/macro40.rs b/gcc/testsuite/rust/compile/macro40.rs
index 7151f3a83bc..f9d048e8ab1 100644
--- a/gcc/testsuite/rust/compile/macro40.rs
+++ b/gcc/testsuite/rust/compile/macro40.rs
@@ -1,5 +1,8 @@
 // { dg-additional-options "-w" }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 macro_rules! t {
     () => {
         i32
diff --git a/gcc/testsuite/rust/compile/macro54.rs b/gcc/testsuite/rust/compile/macro54.rs
index afb20263566..d3b3f806a6a 100644
--- a/gcc/testsuite/rust/compile/macro54.rs
+++ b/gcc/testsuite/rust/compile/macro54.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 macro_rules! foo {
     () => {"foo"};
     (number) => { 12 };
diff --git a/gcc/testsuite/rust/compile/name_resolution2.rs b/gcc/testsuite/rust/compile/name_resolution2.rs
index 343f6282a88..7e4f5a14da5 100644
--- a/gcc/testsuite/rust/compile/name_resolution2.rs
+++ b/gcc/testsuite/rust/compile/name_resolution2.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Bar;
 
 trait Foo {
diff --git a/gcc/testsuite/rust/compile/name_resolution4.rs b/gcc/testsuite/rust/compile/name_resolution4.rs
index 1c138e837b2..b2eadbe2c54 100644
--- a/gcc/testsuite/rust/compile/name_resolution4.rs
+++ b/gcc/testsuite/rust/compile/name_resolution4.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     fn foo(&self) {} // { dg-warning "unused name" }
 }
diff --git a/gcc/testsuite/rust/compile/nested_generic.rs b/gcc/testsuite/rust/compile/nested_generic.rs
index 6c3109957f9..322b3c50afb 100644
--- a/gcc/testsuite/rust/compile/nested_generic.rs
+++ b/gcc/testsuite/rust/compile/nested_generic.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub struct A<T>(T);
 pub struct B<T>(T);
 
diff --git a/gcc/testsuite/rust/compile/parse_associated_type_as_generic_arg.rs b/gcc/testsuite/rust/compile/parse_associated_type_as_generic_arg.rs
index fbe79f00bde..ba1042a9bbe 100644
--- a/gcc/testsuite/rust/compile/parse_associated_type_as_generic_arg.rs
+++ b/gcc/testsuite/rust/compile/parse_associated_type_as_generic_arg.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     type A;
 
diff --git a/gcc/testsuite/rust/compile/parse_associated_type_as_generic_arg2.rs b/gcc/testsuite/rust/compile/parse_associated_type_as_generic_arg2.rs
index ba5d9a3936c..a2662c25e21 100644
--- a/gcc/testsuite/rust/compile/parse_associated_type_as_generic_arg2.rs
+++ b/gcc/testsuite/rust/compile/parse_associated_type_as_generic_arg2.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     type A;
 
diff --git a/gcc/testsuite/rust/compile/parse_associated_type_as_generic_arg3.rs b/gcc/testsuite/rust/compile/parse_associated_type_as_generic_arg3.rs
index 72c1b95c09a..b4342e8c4cb 100644
--- a/gcc/testsuite/rust/compile/parse_associated_type_as_generic_arg3.rs
+++ b/gcc/testsuite/rust/compile/parse_associated_type_as_generic_arg3.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Bar {
     type B;
 
diff --git a/gcc/testsuite/rust/compile/parse_complex_generic_application.rs b/gcc/testsuite/rust/compile/parse_complex_generic_application.rs
index d5c7bf488b7..02877dd727e 100644
--- a/gcc/testsuite/rust/compile/parse_complex_generic_application.rs
+++ b/gcc/testsuite/rust/compile/parse_complex_generic_application.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub enum Either<T, E> {
     Left(T),
     Right(E),
diff --git a/gcc/testsuite/rust/compile/parse_complex_generic_application2.rs b/gcc/testsuite/rust/compile/parse_complex_generic_application2.rs
index 0361931c50c..5ebc94f1f98 100644
--- a/gcc/testsuite/rust/compile/parse_complex_generic_application2.rs
+++ b/gcc/testsuite/rust/compile/parse_complex_generic_application2.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub enum Either<L, R> {
     Left(L),
     Right(R),
diff --git a/gcc/testsuite/rust/compile/path_as_generic_arg.rs b/gcc/testsuite/rust/compile/path_as_generic_arg.rs
index 35b3160e9a8..21baf8000e7 100644
--- a/gcc/testsuite/rust/compile/path_as_generic_arg.rs
+++ b/gcc/testsuite/rust/compile/path_as_generic_arg.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub enum Result<T, E> {
     Ok(T),
     Err(E),
diff --git a/gcc/testsuite/rust/compile/privacy4.rs b/gcc/testsuite/rust/compile/privacy4.rs
index d1ce0afd654..648b7b9adb7 100644
--- a/gcc/testsuite/rust/compile/privacy4.rs
+++ b/gcc/testsuite/rust/compile/privacy4.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 mod orange {
     mod green {
         fn bean<T>(value: T) -> T {
diff --git a/gcc/testsuite/rust/compile/privacy6.rs b/gcc/testsuite/rust/compile/privacy6.rs
index 487ed024209..1680c248144 100644
--- a/gcc/testsuite/rust/compile/privacy6.rs
+++ b/gcc/testsuite/rust/compile/privacy6.rs
@@ -1,5 +1,8 @@
 // { dg-additional-options "-w" }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Adt;
 enum EAdt {
     V0,
diff --git a/gcc/testsuite/rust/compile/sizeof-stray-infer-var-bug.rs b/gcc/testsuite/rust/compile/sizeof-stray-infer-var-bug.rs
index 310da661fca..a5f0c2b78fb 100644
--- a/gcc/testsuite/rust/compile/sizeof-stray-infer-var-bug.rs
+++ b/gcc/testsuite/rust/compile/sizeof-stray-infer-var-bug.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 mod mem {
     extern "rust-intrinsic" {
         pub fn size_of<T>() -> usize;
diff --git a/gcc/testsuite/rust/compile/stmt_with_block_dot.rs b/gcc/testsuite/rust/compile/stmt_with_block_dot.rs
index ae623c34557..c7037af8cd4 100644
--- a/gcc/testsuite/rust/compile/stmt_with_block_dot.rs
+++ b/gcc/testsuite/rust/compile/stmt_with_block_dot.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub struct A(i32, i32);
 
 trait Clone {
diff --git a/gcc/testsuite/rust/compile/torture/associated_types1.rs b/gcc/testsuite/rust/compile/torture/associated_types1.rs
index bf181df7045..2be703722c2 100644
--- a/gcc/testsuite/rust/compile/torture/associated_types1.rs
+++ b/gcc/testsuite/rust/compile/torture/associated_types1.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Foo {
     type A;
 
diff --git a/gcc/testsuite/rust/compile/torture/forward_decl_5.rs b/gcc/testsuite/rust/compile/torture/forward_decl_5.rs
index 73a47fe061b..670ab0a799f 100644
--- a/gcc/testsuite/rust/compile/torture/forward_decl_5.rs
+++ b/gcc/testsuite/rust/compile/torture/forward_decl_5.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub fn main() {
     let a;
     a = foo { a: 123, b: 456f32 };
diff --git a/gcc/testsuite/rust/compile/torture/generics1.rs b/gcc/testsuite/rust/compile/torture/generics1.rs
index 87bcdc8f305..b32eddd6c48 100644
--- a/gcc/testsuite/rust/compile/torture/generics1.rs
+++ b/gcc/testsuite/rust/compile/torture/generics1.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo {
     a: f32,
     b: bool,
diff --git a/gcc/testsuite/rust/compile/torture/generics10.rs b/gcc/testsuite/rust/compile/torture/generics10.rs
index 8473d49587b..1a17e842a0d 100644
--- a/gcc/testsuite/rust/compile/torture/generics10.rs
+++ b/gcc/testsuite/rust/compile/torture/generics10.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<T>(T);
 
 struct Bar<T> {
diff --git a/gcc/testsuite/rust/compile/torture/generics11.rs b/gcc/testsuite/rust/compile/torture/generics11.rs
index 3c8f5ba0058..9d5e719d774 100644
--- a/gcc/testsuite/rust/compile/torture/generics11.rs
+++ b/gcc/testsuite/rust/compile/torture/generics11.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<T>(T, u32);
 
 type TypeAlias = Foo<i32>;
diff --git a/gcc/testsuite/rust/compile/torture/generics12.rs b/gcc/testsuite/rust/compile/torture/generics12.rs
index f31be584e09..9347b24d2d4 100644
--- a/gcc/testsuite/rust/compile/torture/generics12.rs
+++ b/gcc/testsuite/rust/compile/torture/generics12.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct GenericStruct<T>(T, usize);
 
 impl GenericStruct<i32> {
diff --git a/gcc/testsuite/rust/compile/torture/generics13.rs b/gcc/testsuite/rust/compile/torture/generics13.rs
index 9eb598f02a8..00b26ec0968 100644
--- a/gcc/testsuite/rust/compile/torture/generics13.rs
+++ b/gcc/testsuite/rust/compile/torture/generics13.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A> {
     a: A,
     // { dg-warning "field is never read" "" { target *-*-* } .-1 }
diff --git a/gcc/testsuite/rust/compile/torture/generics14.rs b/gcc/testsuite/rust/compile/torture/generics14.rs
index e51a4079e30..5be39ebff91 100644
--- a/gcc/testsuite/rust/compile/torture/generics14.rs
+++ b/gcc/testsuite/rust/compile/torture/generics14.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A> {
     a: A,
     // { dg-warning "field is never read" "" { target *-*-* } .-1 }
diff --git a/gcc/testsuite/rust/compile/torture/generics15.rs b/gcc/testsuite/rust/compile/torture/generics15.rs
index c16a67c4dd5..2b1f31c0217 100644
--- a/gcc/testsuite/rust/compile/torture/generics15.rs
+++ b/gcc/testsuite/rust/compile/torture/generics15.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<T>(T, bool);
 
 impl Foo<i32> {
diff --git a/gcc/testsuite/rust/compile/torture/generics16.rs b/gcc/testsuite/rust/compile/torture/generics16.rs
index 15b9d7b55e7..a9fa2ebdf0b 100644
--- a/gcc/testsuite/rust/compile/torture/generics16.rs
+++ b/gcc/testsuite/rust/compile/torture/generics16.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<T>(T, bool);
 
 impl Foo<i32> {
diff --git a/gcc/testsuite/rust/compile/torture/generics17.rs b/gcc/testsuite/rust/compile/torture/generics17.rs
index d52314999b9..9a04158e4c9 100644
--- a/gcc/testsuite/rust/compile/torture/generics17.rs
+++ b/gcc/testsuite/rust/compile/torture/generics17.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<T>(T);
 
 impl<X> Foo<X> {
diff --git a/gcc/testsuite/rust/compile/torture/generics18.rs b/gcc/testsuite/rust/compile/torture/generics18.rs
index 4c98b86a1b9..cb7b1fa7404 100644
--- a/gcc/testsuite/rust/compile/torture/generics18.rs
+++ b/gcc/testsuite/rust/compile/torture/generics18.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<T>(T);
 
 impl<X> Foo<X> {
diff --git a/gcc/testsuite/rust/compile/torture/generics19.rs b/gcc/testsuite/rust/compile/torture/generics19.rs
index 9a5b4cb48dc..c98599fffda 100644
--- a/gcc/testsuite/rust/compile/torture/generics19.rs
+++ b/gcc/testsuite/rust/compile/torture/generics19.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<X, Y>(X, Y);
 
 impl<T> Foo<u32, T> {
diff --git a/gcc/testsuite/rust/compile/torture/generics2.rs b/gcc/testsuite/rust/compile/torture/generics2.rs
index da0ab992243..e720b422149 100644
--- a/gcc/testsuite/rust/compile/torture/generics2.rs
+++ b/gcc/testsuite/rust/compile/torture/generics2.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo(f32, bool);
 
 struct GenericStruct<T>(T, usize);
diff --git a/gcc/testsuite/rust/compile/torture/generics20.rs b/gcc/testsuite/rust/compile/torture/generics20.rs
index 8fe1cffdf7d..92b022e3746 100644
--- a/gcc/testsuite/rust/compile/torture/generics20.rs
+++ b/gcc/testsuite/rust/compile/torture/generics20.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A, B>(A, B);
 
 impl<T> Foo<T, T> {
diff --git a/gcc/testsuite/rust/compile/torture/generics21.rs b/gcc/testsuite/rust/compile/torture/generics21.rs
index dc4e935cac7..1c74ea42999 100644
--- a/gcc/testsuite/rust/compile/torture/generics21.rs
+++ b/gcc/testsuite/rust/compile/torture/generics21.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 fn callee<T>(t: &T) -> i32 {
     // { dg-warning "unused name" "" { target *-*-* } .-1 }
     32
diff --git a/gcc/testsuite/rust/compile/torture/generics22.rs b/gcc/testsuite/rust/compile/torture/generics22.rs
index 465ebb0f5e1..b838e6e8262 100644
--- a/gcc/testsuite/rust/compile/torture/generics22.rs
+++ b/gcc/testsuite/rust/compile/torture/generics22.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 fn callee<T>(t: (T, bool)) -> i32 {
     // { dg-warning "unused name" "" { target *-*-* } .-1 }
     32
diff --git a/gcc/testsuite/rust/compile/torture/generics23.rs b/gcc/testsuite/rust/compile/torture/generics23.rs
index 2169e3649c6..bf4dfb59f6b 100644
--- a/gcc/testsuite/rust/compile/torture/generics23.rs
+++ b/gcc/testsuite/rust/compile/torture/generics23.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A = f32>(A);
 
 fn main() {
diff --git a/gcc/testsuite/rust/compile/torture/generics24.rs b/gcc/testsuite/rust/compile/torture/generics24.rs
index 0de45a8c404..ce782c0e987 100644
--- a/gcc/testsuite/rust/compile/torture/generics24.rs
+++ b/gcc/testsuite/rust/compile/torture/generics24.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A = (isize, char)> {
     a: A,
 }
diff --git a/gcc/testsuite/rust/compile/torture/generics25.rs b/gcc/testsuite/rust/compile/torture/generics25.rs
index e7792e3efb3..4fe952a5da1 100644
--- a/gcc/testsuite/rust/compile/torture/generics25.rs
+++ b/gcc/testsuite/rust/compile/torture/generics25.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A, B = (A, A)>(A, B);
 
 fn main() {
diff --git a/gcc/testsuite/rust/compile/torture/generics26.rs b/gcc/testsuite/rust/compile/torture/generics26.rs
index 522e16f32f7..0111add4138 100644
--- a/gcc/testsuite/rust/compile/torture/generics26.rs
+++ b/gcc/testsuite/rust/compile/torture/generics26.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 // github issue #415
 fn test<A, B>(a: A, b: B) -> (A, B) {
     (a, b)
diff --git a/gcc/testsuite/rust/compile/torture/generics27.rs b/gcc/testsuite/rust/compile/torture/generics27.rs
index 9871638dd9f..c4ca4db81e0 100644
--- a/gcc/testsuite/rust/compile/torture/generics27.rs
+++ b/gcc/testsuite/rust/compile/torture/generics27.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 // github issue #415
 fn test<A>(a: &A) -> &A {
     a
diff --git a/gcc/testsuite/rust/compile/torture/generics28.rs b/gcc/testsuite/rust/compile/torture/generics28.rs
index 8cee8b00fb2..c1ffd9c245f 100644
--- a/gcc/testsuite/rust/compile/torture/generics28.rs
+++ b/gcc/testsuite/rust/compile/torture/generics28.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A, B>(A, B);
 
 impl Foo<i32, f32> {
diff --git a/gcc/testsuite/rust/compile/torture/generics29.rs b/gcc/testsuite/rust/compile/torture/generics29.rs
index e09a1044574..e9c693e6db7 100644
--- a/gcc/testsuite/rust/compile/torture/generics29.rs
+++ b/gcc/testsuite/rust/compile/torture/generics29.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A, B>(A, B);
 
 impl Foo<i32, f32> {
diff --git a/gcc/testsuite/rust/compile/torture/generics3.rs b/gcc/testsuite/rust/compile/torture/generics3.rs
index ceec8f7d9c6..4c5dabcbd8b 100644
--- a/gcc/testsuite/rust/compile/torture/generics3.rs
+++ b/gcc/testsuite/rust/compile/torture/generics3.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 fn test<T>(a: T) -> T {
     a
 }
diff --git a/gcc/testsuite/rust/compile/torture/generics30.rs b/gcc/testsuite/rust/compile/torture/generics30.rs
index 229f6d1254b..24ae58f0860 100644
--- a/gcc/testsuite/rust/compile/torture/generics30.rs
+++ b/gcc/testsuite/rust/compile/torture/generics30.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A, B>(A, B);
 
 impl<T> Foo<T, f32> {
diff --git a/gcc/testsuite/rust/compile/torture/generics31.rs b/gcc/testsuite/rust/compile/torture/generics31.rs
index 68ad4bf9a96..f8e2f36ef73 100644
--- a/gcc/testsuite/rust/compile/torture/generics31.rs
+++ b/gcc/testsuite/rust/compile/torture/generics31.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A, B>(A, B);
 
 impl<T> Foo<T, f32> {
diff --git a/gcc/testsuite/rust/compile/torture/generics32.rs b/gcc/testsuite/rust/compile/torture/generics32.rs
index 21b9cae7409..49c4539d91d 100644
--- a/gcc/testsuite/rust/compile/torture/generics32.rs
+++ b/gcc/testsuite/rust/compile/torture/generics32.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A, B>(A, B);
 
 impl<T> Foo<T, f32> {
diff --git a/gcc/testsuite/rust/compile/torture/generics4.rs b/gcc/testsuite/rust/compile/torture/generics4.rs
index 915cc49c68b..54bdf56b63f 100644
--- a/gcc/testsuite/rust/compile/torture/generics4.rs
+++ b/gcc/testsuite/rust/compile/torture/generics4.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<T> {
     a: T,
 // { dg-warning "field is never read" "" { target *-*-* } .-1 }
diff --git a/gcc/testsuite/rust/compile/torture/generics5.rs b/gcc/testsuite/rust/compile/torture/generics5.rs
index b7f43028992..df27fdd8f6e 100644
--- a/gcc/testsuite/rust/compile/torture/generics5.rs
+++ b/gcc/testsuite/rust/compile/torture/generics5.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 fn test<T>(a: T) -> T {
     a
 }
diff --git a/gcc/testsuite/rust/compile/torture/generics6.rs b/gcc/testsuite/rust/compile/torture/generics6.rs
index 5456b6dcb97..16b85fbcb18 100644
--- a/gcc/testsuite/rust/compile/torture/generics6.rs
+++ b/gcc/testsuite/rust/compile/torture/generics6.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<T>(T);
 
 struct Bar<T> {
diff --git a/gcc/testsuite/rust/compile/torture/generics7.rs b/gcc/testsuite/rust/compile/torture/generics7.rs
index e8e5ca69c3d..66454d6166d 100644
--- a/gcc/testsuite/rust/compile/torture/generics7.rs
+++ b/gcc/testsuite/rust/compile/torture/generics7.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<T>(T);
 
 struct Bar {
diff --git a/gcc/testsuite/rust/compile/torture/generics8.rs b/gcc/testsuite/rust/compile/torture/generics8.rs
index 036d85568f0..bc6d09b9919 100644
--- a/gcc/testsuite/rust/compile/torture/generics8.rs
+++ b/gcc/testsuite/rust/compile/torture/generics8.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct GenericStruct<T>(T, usize);
 
 impl<T> GenericStruct<T> {
diff --git a/gcc/testsuite/rust/compile/torture/generics9.rs b/gcc/testsuite/rust/compile/torture/generics9.rs
index 307c34f3e9b..3d9d748ef98 100644
--- a/gcc/testsuite/rust/compile/torture/generics9.rs
+++ b/gcc/testsuite/rust/compile/torture/generics9.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct GenericStruct<T>(T, usize);
 
 impl<T> GenericStruct<T> {
diff --git a/gcc/testsuite/rust/compile/torture/intrinsics-2.rs b/gcc/testsuite/rust/compile/torture/intrinsics-2.rs
index 6b2339f38f3..a6cd8f8553f 100644
--- a/gcc/testsuite/rust/compile/torture/intrinsics-2.rs
+++ b/gcc/testsuite/rust/compile/torture/intrinsics-2.rs
@@ -2,6 +2,9 @@
 
 #![feature(intrinsics)]
 
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "rust-intrinsic" {
     pub fn size_of<T>() -> usize;
 }
diff --git a/gcc/testsuite/rust/compile/torture/intrinsics-6.rs b/gcc/testsuite/rust/compile/torture/intrinsics-6.rs
index 4e510e11087..0e263459237 100644
--- a/gcc/testsuite/rust/compile/torture/intrinsics-6.rs
+++ b/gcc/testsuite/rust/compile/torture/intrinsics-6.rs
@@ -1,5 +1,8 @@
 #![feature(intrinsics)]
 
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "rust-intrinsic" {
     pub fn unchecked_add<T>(x: T, y: T) -> T;
     pub fn unchecked_sub<T>(x: T, y: T) -> T;
diff --git a/gcc/testsuite/rust/compile/torture/intrinsics-7.rs b/gcc/testsuite/rust/compile/torture/intrinsics-7.rs
index da85fff5cd6..754aacb3449 100644
--- a/gcc/testsuite/rust/compile/torture/intrinsics-7.rs
+++ b/gcc/testsuite/rust/compile/torture/intrinsics-7.rs
@@ -1,5 +1,8 @@
 #![feature(intrinsics)]
 
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "rust-intrinsic" {
     pub fn unchecked_add<T>(x: T, y: T) -> T;
     // { dg-error "unchecked operation intrinsics can only be used with basic integer types .got .NotAdd.." "" { target *-*-* } .-1 }
diff --git a/gcc/testsuite/rust/compile/torture/intrinsics-8.rs b/gcc/testsuite/rust/compile/torture/intrinsics-8.rs
index 8788da5c7fc..deb19bd431c 100644
--- a/gcc/testsuite/rust/compile/torture/intrinsics-8.rs
+++ b/gcc/testsuite/rust/compile/torture/intrinsics-8.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 mod intrinsics {
     extern "rust-intrinsic" {
         pub fn add_with_overflow<T>(x: T, y: T) -> (T, bool);
diff --git a/gcc/testsuite/rust/compile/torture/issue-1024.rs b/gcc/testsuite/rust/compile/torture/issue-1024.rs
index a8503cebf53..819e329058c 100644
--- a/gcc/testsuite/rust/compile/torture/issue-1024.rs
+++ b/gcc/testsuite/rust/compile/torture/issue-1024.rs
@@ -1,5 +1,8 @@
 #![feature(intrinsics)]
 
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "rust-intrinsic" {
     pub fn size_of<T>() -> usize;
 }
diff --git a/gcc/testsuite/rust/compile/torture/issue-1075.rs b/gcc/testsuite/rust/compile/torture/issue-1075.rs
index 201a241d45d..d23774b2c0b 100644
--- a/gcc/testsuite/rust/compile/torture/issue-1075.rs
+++ b/gcc/testsuite/rust/compile/torture/issue-1075.rs
@@ -1,6 +1,9 @@
 // { dg-additional-options "-w" }
 #![feature(intrinsics)]
 
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "rust-intrinsic" {
     #[rustc_const_stable(feature = "const_ptr_offset", since = "1.61.0")]
     pub fn offset<T>(dst: *const T, offset: isize) -> *const T;
diff --git a/gcc/testsuite/rust/compile/torture/issue-1432.rs b/gcc/testsuite/rust/compile/torture/issue-1432.rs
index 0269823fb6d..5b526fdd52d 100644
--- a/gcc/testsuite/rust/compile/torture/issue-1432.rs
+++ b/gcc/testsuite/rust/compile/torture/issue-1432.rs
@@ -1,5 +1,9 @@
 // { dg-additional-options "-w" }
 #![feature(intrinsics)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
 mod intrinsics {
     extern "rust-intrinsic" {
         #[rustc_const_stable(feature = "const_int_wrapping", since = "1.40.0")]
diff --git a/gcc/testsuite/rust/compile/torture/issue-1555.rs b/gcc/testsuite/rust/compile/torture/issue-1555.rs
index adb48911648..bee8952f368 100644
--- a/gcc/testsuite/rust/compile/torture/issue-1555.rs
+++ b/gcc/testsuite/rust/compile/torture/issue-1555.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "C" {
     fn printf(s: *const i8, ...);
 }
diff --git a/gcc/testsuite/rust/compile/torture/issue-368.rs b/gcc/testsuite/rust/compile/torture/issue-368.rs
index 18bc9bdc62e..775e70d9d23 100644
--- a/gcc/testsuite/rust/compile/torture/issue-368.rs
+++ b/gcc/testsuite/rust/compile/torture/issue-368.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct S;
 
 fn foo<S>(s: S) -> S {
diff --git a/gcc/testsuite/rust/compile/torture/issue-808.rs b/gcc/testsuite/rust/compile/torture/issue-808.rs
index 2e5a81fe516..4186d54f4bc 100644
--- a/gcc/testsuite/rust/compile/torture/issue-808.rs
+++ b/gcc/testsuite/rust/compile/torture/issue-808.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Foo {
     type Target;
 
diff --git a/gcc/testsuite/rust/compile/torture/issue-862.rs b/gcc/testsuite/rust/compile/torture/issue-862.rs
index c1a4609ba86..d9ac9124601 100644
--- a/gcc/testsuite/rust/compile/torture/issue-862.rs
+++ b/gcc/testsuite/rust/compile/torture/issue-862.rs
@@ -1,4 +1,8 @@
 // { dg-additional-options "-w" }
+
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "C" {
     fn printf(s: *const i8, ...);
 }
diff --git a/gcc/testsuite/rust/compile/torture/issue-893-2.rs b/gcc/testsuite/rust/compile/torture/issue-893-2.rs
index 88a865d66dc..3df27b8335e 100644
--- a/gcc/testsuite/rust/compile/torture/issue-893-2.rs
+++ b/gcc/testsuite/rust/compile/torture/issue-893-2.rs
@@ -1,4 +1,7 @@
 // { dg-additional-options "-w" }
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<T>(T);
 impl<T> Foo<T> {
     fn new<Y>(a: T, b: Y) -> Self {
diff --git a/gcc/testsuite/rust/compile/torture/issue-893.rs b/gcc/testsuite/rust/compile/torture/issue-893.rs
index d8245f3e0d8..f96b5c34643 100644
--- a/gcc/testsuite/rust/compile/torture/issue-893.rs
+++ b/gcc/testsuite/rust/compile/torture/issue-893.rs
@@ -1,4 +1,7 @@
 // { dg-additional-options "-w" }
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<T>(T);
 impl<T> Foo<T> {
     fn new<Y>(a: T, b: Y) -> Self {
diff --git a/gcc/testsuite/rust/compile/torture/must_use2.rs b/gcc/testsuite/rust/compile/torture/must_use2.rs
index 466f7ee7a14..cf6643eec25 100644
--- a/gcc/testsuite/rust/compile/torture/must_use2.rs
+++ b/gcc/testsuite/rust/compile/torture/must_use2.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait A {
     #[must_use]
     fn test() -> i32;
diff --git a/gcc/testsuite/rust/compile/torture/nested_fn2.rs b/gcc/testsuite/rust/compile/torture/nested_fn2.rs
index 7040c862e75..ad7a10b0a82 100644
--- a/gcc/testsuite/rust/compile/torture/nested_fn2.rs
+++ b/gcc/testsuite/rust/compile/torture/nested_fn2.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub fn main() {
     fn test<T>(x: T) -> T {
         x
diff --git a/gcc/testsuite/rust/compile/torture/phantom_data.rs b/gcc/testsuite/rust/compile/torture/phantom_data.rs
index 89e76aeb5eb..d6c5adcf89a 100644
--- a/gcc/testsuite/rust/compile/torture/phantom_data.rs
+++ b/gcc/testsuite/rust/compile/torture/phantom_data.rs
@@ -1,4 +1,7 @@
 // { dg-options "-w" }
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "phantom_data"]
 struct PhantomData<T>;
 
diff --git a/gcc/testsuite/rust/compile/torture/range-lang-item1.rs b/gcc/testsuite/rust/compile/torture/range-lang-item1.rs
index 86946162276..604fee8e328 100644
--- a/gcc/testsuite/rust/compile/torture/range-lang-item1.rs
+++ b/gcc/testsuite/rust/compile/torture/range-lang-item1.rs
@@ -1,4 +1,7 @@
 // { dg-additional-options "-w" }
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "RangeFull"]
 pub struct RangeFull;
 
diff --git a/gcc/testsuite/rust/compile/torture/traits1.rs b/gcc/testsuite/rust/compile/torture/traits1.rs
index 90357738a81..8929501de6f 100644
--- a/gcc/testsuite/rust/compile/torture/traits1.rs
+++ b/gcc/testsuite/rust/compile/torture/traits1.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     fn bar() -> i32;
 }
diff --git a/gcc/testsuite/rust/compile/torture/traits11.rs b/gcc/testsuite/rust/compile/torture/traits11.rs
index 41c82f01b6d..02383a5610a 100644
--- a/gcc/testsuite/rust/compile/torture/traits11.rs
+++ b/gcc/testsuite/rust/compile/torture/traits11.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     type A;
 
diff --git a/gcc/testsuite/rust/compile/torture/traits12.rs b/gcc/testsuite/rust/compile/torture/traits12.rs
index a55b965baf0..8648022b8fe 100644
--- a/gcc/testsuite/rust/compile/torture/traits12.rs
+++ b/gcc/testsuite/rust/compile/torture/traits12.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     type A;
 
diff --git a/gcc/testsuite/rust/compile/torture/traits13.rs b/gcc/testsuite/rust/compile/torture/traits13.rs
index 326f0390756..5d9c81943d9 100644
--- a/gcc/testsuite/rust/compile/torture/traits13.rs
+++ b/gcc/testsuite/rust/compile/torture/traits13.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Trait {
     const FOO: usize;
     type Target;
diff --git a/gcc/testsuite/rust/compile/torture/traits14.rs b/gcc/testsuite/rust/compile/torture/traits14.rs
index 8bca0d5c1f6..ab546a88fae 100644
--- a/gcc/testsuite/rust/compile/torture/traits14.rs
+++ b/gcc/testsuite/rust/compile/torture/traits14.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo<T> {
     type A;
 
diff --git a/gcc/testsuite/rust/compile/torture/traits15.rs b/gcc/testsuite/rust/compile/torture/traits15.rs
index c8c40b78b45..c1863a8a2f9 100644
--- a/gcc/testsuite/rust/compile/torture/traits15.rs
+++ b/gcc/testsuite/rust/compile/torture/traits15.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo<T> {
     type A;
 
diff --git a/gcc/testsuite/rust/compile/torture/traits16.rs b/gcc/testsuite/rust/compile/torture/traits16.rs
index afc4a86de6d..8c8e682e6c1 100644
--- a/gcc/testsuite/rust/compile/torture/traits16.rs
+++ b/gcc/testsuite/rust/compile/torture/traits16.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait A {
     fn a() -> i32 {
         123
diff --git a/gcc/testsuite/rust/compile/torture/traits17.rs b/gcc/testsuite/rust/compile/torture/traits17.rs
index 6da8bcb0082..268c2bd50c5 100644
--- a/gcc/testsuite/rust/compile/torture/traits17.rs
+++ b/gcc/testsuite/rust/compile/torture/traits17.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait A {
     fn a() -> i32 {
         123
diff --git a/gcc/testsuite/rust/compile/torture/traits18.rs b/gcc/testsuite/rust/compile/torture/traits18.rs
index 63319dd2daa..512152e9fdf 100644
--- a/gcc/testsuite/rust/compile/torture/traits18.rs
+++ b/gcc/testsuite/rust/compile/torture/traits18.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo<'a> {}
 
 trait Bar {
diff --git a/gcc/testsuite/rust/compile/torture/traits19.rs b/gcc/testsuite/rust/compile/torture/traits19.rs
index 4412656f535..4be898d4024 100644
--- a/gcc/testsuite/rust/compile/torture/traits19.rs
+++ b/gcc/testsuite/rust/compile/torture/traits19.rs
@@ -1,4 +1,7 @@
 // { dg-additional-options "-w" }
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Get {
     type Value;
     fn get(&self) -> &<Self as Get>::Value;
diff --git a/gcc/testsuite/rust/compile/torture/traits2.rs b/gcc/testsuite/rust/compile/torture/traits2.rs
index fc6eb6002e0..a9dca948d1b 100644
--- a/gcc/testsuite/rust/compile/torture/traits2.rs
+++ b/gcc/testsuite/rust/compile/torture/traits2.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     fn bar() -> i32;
 }
diff --git a/gcc/testsuite/rust/compile/torture/traits3.rs b/gcc/testsuite/rust/compile/torture/traits3.rs
index deeb81e0946..d805da5d2d4 100644
--- a/gcc/testsuite/rust/compile/torture/traits3.rs
+++ b/gcc/testsuite/rust/compile/torture/traits3.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Foo {
     fn Bar(self) -> i32;
 }
diff --git a/gcc/testsuite/rust/compile/torture/traits4.rs b/gcc/testsuite/rust/compile/torture/traits4.rs
index 67b012c11f5..49c4db2d34a 100644
--- a/gcc/testsuite/rust/compile/torture/traits4.rs
+++ b/gcc/testsuite/rust/compile/torture/traits4.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     type A;
     type B;
diff --git a/gcc/testsuite/rust/compile/torture/traits5.rs b/gcc/testsuite/rust/compile/torture/traits5.rs
index 445b0658f5c..c60a2597418 100644
--- a/gcc/testsuite/rust/compile/torture/traits5.rs
+++ b/gcc/testsuite/rust/compile/torture/traits5.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     type A;
     type B;
diff --git a/gcc/testsuite/rust/compile/torture/traits6.rs b/gcc/testsuite/rust/compile/torture/traits6.rs
index 260dde3f465..f11735324f2 100644
--- a/gcc/testsuite/rust/compile/torture/traits6.rs
+++ b/gcc/testsuite/rust/compile/torture/traits6.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     type A;
 
diff --git a/gcc/testsuite/rust/compile/torture/traits7.rs b/gcc/testsuite/rust/compile/torture/traits7.rs
index 7bc3384ab41..8e4472d529a 100644
--- a/gcc/testsuite/rust/compile/torture/traits7.rs
+++ b/gcc/testsuite/rust/compile/torture/traits7.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     const A: i32;
 
diff --git a/gcc/testsuite/rust/compile/torture/traits8.rs b/gcc/testsuite/rust/compile/torture/traits8.rs
index 459032fb4a2..cc0875bd075 100644
--- a/gcc/testsuite/rust/compile/torture/traits8.rs
+++ b/gcc/testsuite/rust/compile/torture/traits8.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     fn default() -> i32;
 }
diff --git a/gcc/testsuite/rust/compile/torture/traits9.rs b/gcc/testsuite/rust/compile/torture/traits9.rs
index 89e4bf19b0c..3a7c37fcbb6 100644
--- a/gcc/testsuite/rust/compile/torture/traits9.rs
+++ b/gcc/testsuite/rust/compile/torture/traits9.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     fn default() -> i32;
     fn get(self) -> i32;
diff --git a/gcc/testsuite/rust/compile/torture/transmute-size-check-1.rs b/gcc/testsuite/rust/compile/torture/transmute-size-check-1.rs
index 461a35de8ef..6d34fb1b024 100644
--- a/gcc/testsuite/rust/compile/torture/transmute-size-check-1.rs
+++ b/gcc/testsuite/rust/compile/torture/transmute-size-check-1.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 mod mem {
     extern "rust-intrinsic" {
         fn size_of<T>() -> usize;
diff --git a/gcc/testsuite/rust/compile/torture/transmute1.rs b/gcc/testsuite/rust/compile/torture/transmute1.rs
index af9a55d1b97..b2a0d07a3d7 100644
--- a/gcc/testsuite/rust/compile/torture/transmute1.rs
+++ b/gcc/testsuite/rust/compile/torture/transmute1.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 mod mem {
     extern "rust-intrinsic" {
         fn size_of<T>() -> usize;
diff --git a/gcc/testsuite/rust/compile/torture/uninit-intrinsic-1.rs b/gcc/testsuite/rust/compile/torture/uninit-intrinsic-1.rs
index 0c6772b5f38..cbb92feb495 100644
--- a/gcc/testsuite/rust/compile/torture/uninit-intrinsic-1.rs
+++ b/gcc/testsuite/rust/compile/torture/uninit-intrinsic-1.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 mod intrinsics {
     extern "rust-intrinsic" {
         pub fn uninit<T>() -> T;
diff --git a/gcc/testsuite/rust/compile/torture/utf8_identifiers.rs b/gcc/testsuite/rust/compile/torture/utf8_identifiers.rs
index 7fb86eb5ff0..eeee01c95cf 100644
--- a/gcc/testsuite/rust/compile/torture/utf8_identifiers.rs
+++ b/gcc/testsuite/rust/compile/torture/utf8_identifiers.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub fn f() {
     let crab = ();
 
diff --git a/gcc/testsuite/rust/compile/traits1.rs b/gcc/testsuite/rust/compile/traits1.rs
index 355064eec1a..68f5abb5aa0 100644
--- a/gcc/testsuite/rust/compile/traits1.rs
+++ b/gcc/testsuite/rust/compile/traits1.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     fn Bar() -> i32 {}
     // { dg-error "expected .i32. got .()." "" { target *-*-* } .-1 }
diff --git a/gcc/testsuite/rust/compile/traits10.rs b/gcc/testsuite/rust/compile/traits10.rs
index f8f551ba86d..da6c1555304 100644
--- a/gcc/testsuite/rust/compile/traits10.rs
+++ b/gcc/testsuite/rust/compile/traits10.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo(i32);
 
 trait Bar {
diff --git a/gcc/testsuite/rust/compile/traits11.rs b/gcc/testsuite/rust/compile/traits11.rs
index d06e47d7e16..ac8ccdf5886 100644
--- a/gcc/testsuite/rust/compile/traits11.rs
+++ b/gcc/testsuite/rust/compile/traits11.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo(i32);
 
 trait A {
diff --git a/gcc/testsuite/rust/compile/traits12.rs b/gcc/testsuite/rust/compile/traits12.rs
index b170692f265..b194e073a91 100644
--- a/gcc/testsuite/rust/compile/traits12.rs
+++ b/gcc/testsuite/rust/compile/traits12.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait A<T> {
     type Output;
 
diff --git a/gcc/testsuite/rust/compile/traits2.rs b/gcc/testsuite/rust/compile/traits2.rs
index 376b3c9cc7f..3631a092e56 100644
--- a/gcc/testsuite/rust/compile/traits2.rs
+++ b/gcc/testsuite/rust/compile/traits2.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     fn Bar() -> i32 {}
     // { dg-error "expected .i32. got .()." "" { target *-*-* } .-1 }
diff --git a/gcc/testsuite/rust/compile/traits3.rs b/gcc/testsuite/rust/compile/traits3.rs
index d6d081487b9..119132f80e8 100644
--- a/gcc/testsuite/rust/compile/traits3.rs
+++ b/gcc/testsuite/rust/compile/traits3.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     type A;
 
diff --git a/gcc/testsuite/rust/compile/traits4.rs b/gcc/testsuite/rust/compile/traits4.rs
index 486301d6136..4388b5e1cb5 100644
--- a/gcc/testsuite/rust/compile/traits4.rs
+++ b/gcc/testsuite/rust/compile/traits4.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     const A: i32;
 
diff --git a/gcc/testsuite/rust/compile/traits5.rs b/gcc/testsuite/rust/compile/traits5.rs
index 8b2fb9bc10d..4e9dcc167b7 100644
--- a/gcc/testsuite/rust/compile/traits5.rs
+++ b/gcc/testsuite/rust/compile/traits5.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     const A: i32;
 
diff --git a/gcc/testsuite/rust/compile/traits6.rs b/gcc/testsuite/rust/compile/traits6.rs
index 3579b5a0842..d081dd11e10 100644
--- a/gcc/testsuite/rust/compile/traits6.rs
+++ b/gcc/testsuite/rust/compile/traits6.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     fn default() -> i32;
 }
diff --git a/gcc/testsuite/rust/compile/traits7.rs b/gcc/testsuite/rust/compile/traits7.rs
index 825553ce496..68f3f38f97b 100644
--- a/gcc/testsuite/rust/compile/traits7.rs
+++ b/gcc/testsuite/rust/compile/traits7.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     fn default() -> i32;
 }
diff --git a/gcc/testsuite/rust/compile/traits8.rs b/gcc/testsuite/rust/compile/traits8.rs
index b22590a52bb..ccba9fad5db 100644
--- a/gcc/testsuite/rust/compile/traits8.rs
+++ b/gcc/testsuite/rust/compile/traits8.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait A {
     fn get(self) -> f64;
 }
diff --git a/gcc/testsuite/rust/compile/traits9.rs b/gcc/testsuite/rust/compile/traits9.rs
index e1aef5397fc..bb3034d0f21 100644
--- a/gcc/testsuite/rust/compile/traits9.rs
+++ b/gcc/testsuite/rust/compile/traits9.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo(i32);
 trait Bar {
     fn baz(&self);
diff --git a/gcc/testsuite/rust/compile/type-bindings1.rs b/gcc/testsuite/rust/compile/type-bindings1.rs
index dc0e274fdd5..358035bbc17 100644
--- a/gcc/testsuite/rust/compile/type-bindings1.rs
+++ b/gcc/testsuite/rust/compile/type-bindings1.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A, B>(A, B);
 
 fn main() {
diff --git a/gcc/testsuite/rust/compile/unconstrained_type_param.rs b/gcc/testsuite/rust/compile/unconstrained_type_param.rs
index a510332f167..1cef0b983b0 100644
--- a/gcc/testsuite/rust/compile/unconstrained_type_param.rs
+++ b/gcc/testsuite/rust/compile/unconstrained_type_param.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<T>(T, bool);
 
 impl<X, Y> Foo<X> {
diff --git a/gcc/testsuite/rust/compile/unsafe10.rs b/gcc/testsuite/rust/compile/unsafe10.rs
index 927e69728c9..5861c15cd71 100644
--- a/gcc/testsuite/rust/compile/unsafe10.rs
+++ b/gcc/testsuite/rust/compile/unsafe10.rs
@@ -1,5 +1,8 @@
 #![feature(intrinsics)]
 
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "rust-intrinsic" {
     pub fn rotate_left<T>(l: T, r: T) -> T;
 }
diff --git a/gcc/testsuite/rust/execute/torture/closure1.rs b/gcc/testsuite/rust/execute/torture/closure1.rs
index 62afa78a038..e9564133b55 100644
--- a/gcc/testsuite/rust/execute/torture/closure1.rs
+++ b/gcc/testsuite/rust/execute/torture/closure1.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "C" {
     fn printf(s: *const i8, ...);
 }
diff --git a/gcc/testsuite/rust/execute/torture/closure2.rs b/gcc/testsuite/rust/execute/torture/closure2.rs
index 8e1502dfa43..deca7845f8b 100644
--- a/gcc/testsuite/rust/execute/torture/closure2.rs
+++ b/gcc/testsuite/rust/execute/torture/closure2.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "fn_once"]
 pub trait FnOnce<Args> {
     #[lang = "fn_once_output"]
diff --git a/gcc/testsuite/rust/execute/torture/closure3.rs b/gcc/testsuite/rust/execute/torture/closure3.rs
index 8fa9445ab62..98ec26143a3 100644
--- a/gcc/testsuite/rust/execute/torture/closure3.rs
+++ b/gcc/testsuite/rust/execute/torture/closure3.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "fn_once"]
 pub trait FnOnce<Args> {
     #[lang = "fn_once_output"]
diff --git a/gcc/testsuite/rust/execute/torture/closure4.rs b/gcc/testsuite/rust/execute/torture/closure4.rs
index 07dca44308d..07017760789 100644
--- a/gcc/testsuite/rust/execute/torture/closure4.rs
+++ b/gcc/testsuite/rust/execute/torture/closure4.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "fn_once"]
 pub trait FnOnce<Args> {
     #[lang = "fn_once_output"]
diff --git a/gcc/testsuite/rust/execute/torture/coercion1.rs b/gcc/testsuite/rust/execute/torture/coercion1.rs
index 6ca28233d60..335f4962104 100644
--- a/gcc/testsuite/rust/execute/torture/coercion1.rs
+++ b/gcc/testsuite/rust/execute/torture/coercion1.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo(i32);
 trait Bar {
     fn baz(&self);
diff --git a/gcc/testsuite/rust/execute/torture/coercion2.rs b/gcc/testsuite/rust/execute/torture/coercion2.rs
index 047fd536dca..6be86020bdd 100644
--- a/gcc/testsuite/rust/execute/torture/coercion2.rs
+++ b/gcc/testsuite/rust/execute/torture/coercion2.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo(i32);
 trait Bar {
     fn baz(&self);
diff --git a/gcc/testsuite/rust/execute/torture/coercion3.rs b/gcc/testsuite/rust/execute/torture/coercion3.rs
index ca66dfa0506..e88338ae2f3 100644
--- a/gcc/testsuite/rust/execute/torture/coercion3.rs
+++ b/gcc/testsuite/rust/execute/torture/coercion3.rs
@@ -1,4 +1,7 @@
 // { dg-output "123\n" }
+#[lang = "sized"]
+pub trait Sized {}
+
 trait A {
     fn get_int(&self) -> i32;
 }
diff --git a/gcc/testsuite/rust/execute/torture/copy_nonoverlapping1.rs b/gcc/testsuite/rust/execute/torture/copy_nonoverlapping1.rs
index 39afd3424a4..15bb811773b 100644
--- a/gcc/testsuite/rust/execute/torture/copy_nonoverlapping1.rs
+++ b/gcc/testsuite/rust/execute/torture/copy_nonoverlapping1.rs
@@ -1,4 +1,6 @@
 #![feature(intrinsics)]
+#[lang = "sized"]
+pub trait Sized {}
 
 extern "rust-intrinsic" {
     pub fn copy_nonoverlapping<T>(src: *const T, dst: *mut T, count: usize);
@@ -16,4 +18,4 @@ fn main() -> i32 {
 
         *i_copy - *i
     }
-}
\ No newline at end of file
+}
diff --git a/gcc/testsuite/rust/execute/torture/derive_macro1.rs b/gcc/testsuite/rust/execute/torture/derive_macro1.rs
index 6e0350de3de..22cfaaae191 100644
--- a/gcc/testsuite/rust/execute/torture/derive_macro1.rs
+++ b/gcc/testsuite/rust/execute/torture/derive_macro1.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Clone {
     fn clone(&self) -> Self;
 }
diff --git a/gcc/testsuite/rust/execute/torture/derive_macro3.rs b/gcc/testsuite/rust/execute/torture/derive_macro3.rs
index 716bd908f4e..7b3a089d751 100644
--- a/gcc/testsuite/rust/execute/torture/derive_macro3.rs
+++ b/gcc/testsuite/rust/execute/torture/derive_macro3.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Clone {
     fn clone(&self) -> Self;
 }
diff --git a/gcc/testsuite/rust/execute/torture/derive_macro4.rs b/gcc/testsuite/rust/execute/torture/derive_macro4.rs
index 218bf617bd6..c355ac7905f 100644
--- a/gcc/testsuite/rust/execute/torture/derive_macro4.rs
+++ b/gcc/testsuite/rust/execute/torture/derive_macro4.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Clone {
     fn clone(&self) -> Self;
 }
@@ -26,4 +29,4 @@ fn main() -> i32 {
 
     // should be 0 if all fields were cloned correctly
     l + r
-}
\ No newline at end of file
+}
diff --git a/gcc/testsuite/rust/execute/torture/index1.rs b/gcc/testsuite/rust/execute/torture/index1.rs
index 4682978bdd0..19e58e32b16 100644
--- a/gcc/testsuite/rust/execute/torture/index1.rs
+++ b/gcc/testsuite/rust/execute/torture/index1.rs
@@ -1,4 +1,7 @@
 // { dg-additional-options "-w" }
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "index"]
 trait Index<Idx> {
     type Output;
diff --git a/gcc/testsuite/rust/execute/torture/issue-1120.rs b/gcc/testsuite/rust/execute/torture/issue-1120.rs
index 59792b29a29..7dfa26fc14e 100644
--- a/gcc/testsuite/rust/execute/torture/issue-1120.rs
+++ b/gcc/testsuite/rust/execute/torture/issue-1120.rs
@@ -1,6 +1,9 @@
 // { dg-additional-options "-w" }
 #![feature(intrinsics)]
 
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "rust-intrinsic" {
     #[rustc_const_stable(feature = "const_ptr_offset", since = "1.61.0")]
     pub fn offset<T>(dst: *const T, offset: isize) -> *const T;
diff --git a/gcc/testsuite/rust/execute/torture/issue-1133.rs b/gcc/testsuite/rust/execute/torture/issue-1133.rs
index 8679bb93224..29f532e5c96 100644
--- a/gcc/testsuite/rust/execute/torture/issue-1133.rs
+++ b/gcc/testsuite/rust/execute/torture/issue-1133.rs
@@ -1,6 +1,9 @@
 // { dg-additional-options "-w" }
 #![feature(intrinsics)]
 
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "rust-intrinsic" {
     #[rustc_const_stable(feature = "const_ptr_offset", since = "1.61.0")]
     pub fn offset<T>(dst: *const T, offset: isize) -> *const T;
diff --git a/gcc/testsuite/rust/execute/torture/issue-1198.rs b/gcc/testsuite/rust/execute/torture/issue-1198.rs
index bbc58f0f370..d5c3d895783 100644
--- a/gcc/testsuite/rust/execute/torture/issue-1198.rs
+++ b/gcc/testsuite/rust/execute/torture/issue-1198.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "deref"]
 pub trait Deref {
     type Target;
diff --git a/gcc/testsuite/rust/execute/torture/issue-1232.rs b/gcc/testsuite/rust/execute/torture/issue-1232.rs
index ce53da2d033..6fb42b3167d 100644
--- a/gcc/testsuite/rust/execute/torture/issue-1232.rs
+++ b/gcc/testsuite/rust/execute/torture/issue-1232.rs
@@ -2,6 +2,9 @@
 // { dg-output "slice_access=3\r*\n" }
 #![feature(intrinsics)]
 
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "rust-intrinsic" {
     #[rustc_const_stable(feature = "const_ptr_offset", since = "1.61.0")]
     fn offset<T>(dst: *const T, offset: isize) -> *const T;
diff --git a/gcc/testsuite/rust/execute/torture/issue-1249.rs b/gcc/testsuite/rust/execute/torture/issue-1249.rs
index 06911074c30..e7a261c1a0b 100644
--- a/gcc/testsuite/rust/execute/torture/issue-1249.rs
+++ b/gcc/testsuite/rust/execute/torture/issue-1249.rs
@@ -1,6 +1,9 @@
 // { dg-options "-w" }
 // { dg-output "1\r*\n2\r*\n" }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "C" {
     fn printf(s: *const i8, ...);
 }
diff --git a/gcc/testsuite/rust/execute/torture/issue-1436.rs b/gcc/testsuite/rust/execute/torture/issue-1436.rs
index 96de5d69194..4e6996132de 100644
--- a/gcc/testsuite/rust/execute/torture/issue-1436.rs
+++ b/gcc/testsuite/rust/execute/torture/issue-1436.rs
@@ -1,4 +1,7 @@
 // { dg-options "-w" }
+#[lang = "sized"]
+pub trait Sized {}
+
 mod intrinsics {
     extern "rust-intrinsic" {
         #[rustc_const_stable(feature = "const_ptr_offset", since = "1.61.0")]
diff --git a/gcc/testsuite/rust/execute/torture/issue-1496.rs b/gcc/testsuite/rust/execute/torture/issue-1496.rs
index af4201b7d3e..36291a74236 100644
--- a/gcc/testsuite/rust/execute/torture/issue-1496.rs
+++ b/gcc/testsuite/rust/execute/torture/issue-1496.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "deref"]
 pub trait Deref {
     type Target;
diff --git a/gcc/testsuite/rust/execute/torture/issue-1720-2.rs b/gcc/testsuite/rust/execute/torture/issue-1720-2.rs
index 35833dbb813..9c5356ed736 100644
--- a/gcc/testsuite/rust/execute/torture/issue-1720-2.rs
+++ b/gcc/testsuite/rust/execute/torture/issue-1720-2.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 mod core {
     mod ops {
         #[lang = "add"]
diff --git a/gcc/testsuite/rust/execute/torture/issue-1720.rs b/gcc/testsuite/rust/execute/torture/issue-1720.rs
index 771d7eec537..22182825490 100644
--- a/gcc/testsuite/rust/execute/torture/issue-1720.rs
+++ b/gcc/testsuite/rust/execute/torture/issue-1720.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 mod core {
     mod ops {
         #[lang = "add"]
diff --git a/gcc/testsuite/rust/execute/torture/issue-2052.rs b/gcc/testsuite/rust/execute/torture/issue-2052.rs
index 6c15eb3a470..bf5d6a7cfbc 100644
--- a/gcc/testsuite/rust/execute/torture/issue-2052.rs
+++ b/gcc/testsuite/rust/execute/torture/issue-2052.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "fn_once"]
 pub trait FnOnce<Args> {
     #[lang = "fn_once_output"]
diff --git a/gcc/testsuite/rust/execute/torture/issue-2179.rs b/gcc/testsuite/rust/execute/torture/issue-2179.rs
index 53bacaaf2c1..86ed11f51c5 100644
--- a/gcc/testsuite/rust/execute/torture/issue-2179.rs
+++ b/gcc/testsuite/rust/execute/torture/issue-2179.rs
@@ -1,4 +1,7 @@
 // { dg-output "123\n" }
+#[lang = "sized"]
+pub trait Sized {}
+
 trait A {
     fn get_int(&self) -> i32;
 }
diff --git a/gcc/testsuite/rust/execute/torture/issue-2180.rs b/gcc/testsuite/rust/execute/torture/issue-2180.rs
index 3a7ea104472..beed69620a0 100644
--- a/gcc/testsuite/rust/execute/torture/issue-2180.rs
+++ b/gcc/testsuite/rust/execute/torture/issue-2180.rs
@@ -1,4 +1,7 @@
 // { dg-output "123\n" }
+#[lang = "sized"]
+pub trait Sized {}
+
 trait A {
     fn get_int(&self) -> i32;
 }
diff --git a/gcc/testsuite/rust/execute/torture/issue-2236.rs b/gcc/testsuite/rust/execute/torture/issue-2236.rs
index 1edc5a51762..850b99718ef 100644
--- a/gcc/testsuite/rust/execute/torture/issue-2236.rs
+++ b/gcc/testsuite/rust/execute/torture/issue-2236.rs
@@ -1,4 +1,7 @@
 // { dg-options "-w" }
+#[lang = "sized"]
+pub trait Sized {}
+
 mod core {
     mod ops {
         #[lang = "deref"]
diff --git a/gcc/testsuite/rust/execute/torture/issue-647.rs b/gcc/testsuite/rust/execute/torture/issue-647.rs
index d76d43b6110..6a3565571ef 100644
--- a/gcc/testsuite/rust/execute/torture/issue-647.rs
+++ b/gcc/testsuite/rust/execute/torture/issue-647.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<T>(T);
 
 struct Bar<T> {
diff --git a/gcc/testsuite/rust/execute/torture/issue-845.rs b/gcc/testsuite/rust/execute/torture/issue-845.rs
index f96714d4bae..b11ccd5374a 100644
--- a/gcc/testsuite/rust/execute/torture/issue-845.rs
+++ b/gcc/testsuite/rust/execute/torture/issue-845.rs
@@ -4,6 +4,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo {}
 
 trait Bar {
diff --git a/gcc/testsuite/rust/execute/torture/issue-851.rs b/gcc/testsuite/rust/execute/torture/issue-851.rs
index b3b2b480ec2..1361235b978 100644
--- a/gcc/testsuite/rust/execute/torture/issue-851.rs
+++ b/gcc/testsuite/rust/execute/torture/issue-851.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 enum Foo<T> {
     A,
     B(T),
diff --git a/gcc/testsuite/rust/execute/torture/issue-858.rs b/gcc/testsuite/rust/execute/torture/issue-858.rs
index 51a15613844..0b1118b4f8d 100644
--- a/gcc/testsuite/rust/execute/torture/issue-858.rs
+++ b/gcc/testsuite/rust/execute/torture/issue-858.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 enum Foo<T> {
     A,
     B(T),
diff --git a/gcc/testsuite/rust/execute/torture/macros23.rs b/gcc/testsuite/rust/execute/torture/macros23.rs
index 846352d0487..b27985d3bef 100644
--- a/gcc/testsuite/rust/execute/torture/macros23.rs
+++ b/gcc/testsuite/rust/execute/torture/macros23.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Valuable {
     const VALUE: i32;
 }
diff --git a/gcc/testsuite/rust/execute/torture/macros28.rs b/gcc/testsuite/rust/execute/torture/macros28.rs
index b011f924149..46d9cfcac0c 100644
--- a/gcc/testsuite/rust/execute/torture/macros28.rs
+++ b/gcc/testsuite/rust/execute/torture/macros28.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 macro_rules! t {
     () => {
         i32
diff --git a/gcc/testsuite/rust/execute/torture/method2.rs b/gcc/testsuite/rust/execute/torture/method2.rs
index 79a35eb53d8..e5f630a6d4f 100644
--- a/gcc/testsuite/rust/execute/torture/method2.rs
+++ b/gcc/testsuite/rust/execute/torture/method2.rs
@@ -4,6 +4,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "deref"]
 pub trait Deref {
     type Target;
diff --git a/gcc/testsuite/rust/execute/torture/method3.rs b/gcc/testsuite/rust/execute/torture/method3.rs
index 7217d35c4b3..9a7865ca979 100644
--- a/gcc/testsuite/rust/execute/torture/method3.rs
+++ b/gcc/testsuite/rust/execute/torture/method3.rs
@@ -4,6 +4,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "deref"]
 pub trait Deref {
     type Target;
diff --git a/gcc/testsuite/rust/execute/torture/method4.rs b/gcc/testsuite/rust/execute/torture/method4.rs
index ba1ffd1da36..e20618f0635 100644
--- a/gcc/testsuite/rust/execute/torture/method4.rs
+++ b/gcc/testsuite/rust/execute/torture/method4.rs
@@ -4,6 +4,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "deref"]
 pub trait Deref {
     type Target;
diff --git a/gcc/testsuite/rust/execute/torture/operator_overload_1.rs b/gcc/testsuite/rust/execute/torture/operator_overload_1.rs
index 064a77651ad..9aed3933c42 100644
--- a/gcc/testsuite/rust/execute/torture/operator_overload_1.rs
+++ b/gcc/testsuite/rust/execute/torture/operator_overload_1.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "add"]
 pub trait Add<Rhs = Self> {
     type Output;
diff --git a/gcc/testsuite/rust/execute/torture/operator_overload_10.rs b/gcc/testsuite/rust/execute/torture/operator_overload_10.rs
index 3fa5afd01f3..921ec5f6fe9 100644
--- a/gcc/testsuite/rust/execute/torture/operator_overload_10.rs
+++ b/gcc/testsuite/rust/execute/torture/operator_overload_10.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "deref"]
 pub trait Deref {
     type Target;
diff --git a/gcc/testsuite/rust/execute/torture/operator_overload_11.rs b/gcc/testsuite/rust/execute/torture/operator_overload_11.rs
index 94bc1cd9d96..f0359fb4d80 100644
--- a/gcc/testsuite/rust/execute/torture/operator_overload_11.rs
+++ b/gcc/testsuite/rust/execute/torture/operator_overload_11.rs
@@ -4,6 +4,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "bitand"]
 pub trait BitAnd<Rhs = Self> {
     type Output;
diff --git a/gcc/testsuite/rust/execute/torture/operator_overload_12.rs b/gcc/testsuite/rust/execute/torture/operator_overload_12.rs
index d525ec44e8f..2cd5c69f1e1 100644
--- a/gcc/testsuite/rust/execute/torture/operator_overload_12.rs
+++ b/gcc/testsuite/rust/execute/torture/operator_overload_12.rs
@@ -4,6 +4,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "bitand_assign"]
 pub trait BitAndAssign<Rhs = Self> {
     fn bitand_assign(&mut self, rhs: Rhs);
diff --git a/gcc/testsuite/rust/execute/torture/operator_overload_2.rs b/gcc/testsuite/rust/execute/torture/operator_overload_2.rs
index fab3a83b7f5..68624154742 100644
--- a/gcc/testsuite/rust/execute/torture/operator_overload_2.rs
+++ b/gcc/testsuite/rust/execute/torture/operator_overload_2.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "add"]
 pub trait Add<Rhs = Self> {
     type Output;
diff --git a/gcc/testsuite/rust/execute/torture/operator_overload_3.rs b/gcc/testsuite/rust/execute/torture/operator_overload_3.rs
index 2bcb1c4267c..6c1a8b8f8b8 100644
--- a/gcc/testsuite/rust/execute/torture/operator_overload_3.rs
+++ b/gcc/testsuite/rust/execute/torture/operator_overload_3.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "add"]
 pub trait Add<Rhs = Self> {
     type Output;
diff --git a/gcc/testsuite/rust/execute/torture/operator_overload_4.rs b/gcc/testsuite/rust/execute/torture/operator_overload_4.rs
index e1fcbac1c77..c8235c6a822 100644
--- a/gcc/testsuite/rust/execute/torture/operator_overload_4.rs
+++ b/gcc/testsuite/rust/execute/torture/operator_overload_4.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "neg"]
 pub trait Neg {
     type Output;
diff --git a/gcc/testsuite/rust/execute/torture/operator_overload_5.rs b/gcc/testsuite/rust/execute/torture/operator_overload_5.rs
index 2ba87285ef1..eeef5bc576b 100644
--- a/gcc/testsuite/rust/execute/torture/operator_overload_5.rs
+++ b/gcc/testsuite/rust/execute/torture/operator_overload_5.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "not"]
 pub trait Not {
     type Output;
diff --git a/gcc/testsuite/rust/execute/torture/operator_overload_6.rs b/gcc/testsuite/rust/execute/torture/operator_overload_6.rs
index 50463e74761..d5ffae51fab 100644
--- a/gcc/testsuite/rust/execute/torture/operator_overload_6.rs
+++ b/gcc/testsuite/rust/execute/torture/operator_overload_6.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "add_assign"]
 pub trait AddAssign<Rhs = Self> {
     fn add_assign(&mut self, rhs: Rhs);
diff --git a/gcc/testsuite/rust/execute/torture/operator_overload_7.rs b/gcc/testsuite/rust/execute/torture/operator_overload_7.rs
index 50107bb4324..7226b26920b 100644
--- a/gcc/testsuite/rust/execute/torture/operator_overload_7.rs
+++ b/gcc/testsuite/rust/execute/torture/operator_overload_7.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "deref"]
 pub trait Deref {
     type Target;
diff --git a/gcc/testsuite/rust/execute/torture/operator_overload_8.rs b/gcc/testsuite/rust/execute/torture/operator_overload_8.rs
index e0338b917f5..4b589a8af45 100644
--- a/gcc/testsuite/rust/execute/torture/operator_overload_8.rs
+++ b/gcc/testsuite/rust/execute/torture/operator_overload_8.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "deref"]
 pub trait Deref {
     type Target;
diff --git a/gcc/testsuite/rust/execute/torture/operator_overload_9.rs b/gcc/testsuite/rust/execute/torture/operator_overload_9.rs
index 608ad0fe94e..5fc042850ed 100644
--- a/gcc/testsuite/rust/execute/torture/operator_overload_9.rs
+++ b/gcc/testsuite/rust/execute/torture/operator_overload_9.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "deref"]
 pub trait Deref {
     type Target;
diff --git a/gcc/testsuite/rust/execute/torture/prefetch_data.rs b/gcc/testsuite/rust/execute/torture/prefetch_data.rs
index dc049b136dd..2a847fbcb39 100644
--- a/gcc/testsuite/rust/execute/torture/prefetch_data.rs
+++ b/gcc/testsuite/rust/execute/torture/prefetch_data.rs
@@ -1,5 +1,8 @@
 #![feature(intrinsics)]
 
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "rust-intrinsic" {
     fn prefetch_read_data<T>(addr: *const T, locality: i32);
     fn prefetch_write_data<T>(addr: *const T, locality: i32);
diff --git a/gcc/testsuite/rust/execute/torture/ref-pattern2.rs b/gcc/testsuite/rust/execute/torture/ref-pattern2.rs
index 4c9e755ba84..8e7172406c4 100644
--- a/gcc/testsuite/rust/execute/torture/ref-pattern2.rs
+++ b/gcc/testsuite/rust/execute/torture/ref-pattern2.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "fn_once"]
 pub trait FnOnce<Args> {
     #[lang = "fn_once_output"]
diff --git a/gcc/testsuite/rust/execute/torture/slice-magic.rs b/gcc/testsuite/rust/execute/torture/slice-magic.rs
index b52aa3df510..1f56187ee5d 100644
--- a/gcc/testsuite/rust/execute/torture/slice-magic.rs
+++ b/gcc/testsuite/rust/execute/torture/slice-magic.rs
@@ -1,6 +1,9 @@
 // { dg-additional-options "-w" }
 #![feature(intrinsics)]
 
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "rust-intrinsic" {
     #[rustc_const_stable(feature = "const_ptr_offset", since = "1.61.0")]
     pub fn offset<T>(dst: *const T, offset: isize) -> *const T;
diff --git a/gcc/testsuite/rust/execute/torture/slice-magic2.rs b/gcc/testsuite/rust/execute/torture/slice-magic2.rs
index cdc39f3dcca..20f113ef97d 100644
--- a/gcc/testsuite/rust/execute/torture/slice-magic2.rs
+++ b/gcc/testsuite/rust/execute/torture/slice-magic2.rs
@@ -1,6 +1,9 @@
 // { dg-additional-options "-w" }
 #![feature(intrinsics)]
 
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "rust-intrinsic" {
     #[rustc_const_stable(feature = "const_ptr_offset", since = "1.61.0")]
     pub fn offset<T>(dst: *const T, offset: isize) -> *const T;
diff --git a/gcc/testsuite/rust/execute/torture/slice1.rs b/gcc/testsuite/rust/execute/torture/slice1.rs
index 206082af624..2683179c758 100644
--- a/gcc/testsuite/rust/execute/torture/slice1.rs
+++ b/gcc/testsuite/rust/execute/torture/slice1.rs
@@ -1,4 +1,7 @@
 // { dg-additional-options "-w" }
+#[lang = "sized"]
+pub trait Sized {}
+
 struct FatPtr<T> {
     data: *const T,
     len: usize,
diff --git a/gcc/testsuite/rust/execute/torture/str-layout1.rs b/gcc/testsuite/rust/execute/torture/str-layout1.rs
index c9bcf1631e2..fb3b4e34a7c 100644
--- a/gcc/testsuite/rust/execute/torture/str-layout1.rs
+++ b/gcc/testsuite/rust/execute/torture/str-layout1.rs
@@ -2,6 +2,9 @@
 // { dg-output "t1sz=5 t2sz=10\r*" }
 #![feature(intrinsics)]
 
+#[lang = "sized"]
+pub trait Sized {}
+
 mod mem {
     extern "rust-intrinsic" {
         #[rustc_const_stable(feature = "const_transmute", since = "1.46.0")]
diff --git a/gcc/testsuite/rust/execute/torture/trait1.rs b/gcc/testsuite/rust/execute/torture/trait1.rs
index d4f5878ef18..f8a5959edd5 100644
--- a/gcc/testsuite/rust/execute/torture/trait1.rs
+++ b/gcc/testsuite/rust/execute/torture/trait1.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 struct S;
 
 impl S {
diff --git a/gcc/testsuite/rust/execute/torture/trait10.rs b/gcc/testsuite/rust/execute/torture/trait10.rs
index b0bdeab9091..a5951223e07 100644
--- a/gcc/testsuite/rust/execute/torture/trait10.rs
+++ b/gcc/testsuite/rust/execute/torture/trait10.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo(i32);
 trait Bar {
     fn baz(&self);
diff --git a/gcc/testsuite/rust/execute/torture/trait11.rs b/gcc/testsuite/rust/execute/torture/trait11.rs
index ed7b7c9d6ee..093343c1be5 100644
--- a/gcc/testsuite/rust/execute/torture/trait11.rs
+++ b/gcc/testsuite/rust/execute/torture/trait11.rs
@@ -1,4 +1,7 @@
 /* { dg-output "3\r*\n" } */
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "C" {
     fn printf(s: *const i8, ...);
 }
diff --git a/gcc/testsuite/rust/execute/torture/trait12.rs b/gcc/testsuite/rust/execute/torture/trait12.rs
index a4ba5be116e..83cf107a99c 100644
--- a/gcc/testsuite/rust/execute/torture/trait12.rs
+++ b/gcc/testsuite/rust/execute/torture/trait12.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 trait FnLike<A, R> {
     fn call(&self, arg: A) -> R;
 }
diff --git a/gcc/testsuite/rust/execute/torture/trait13.rs b/gcc/testsuite/rust/execute/torture/trait13.rs
index 49befb8fbb1..928a37c5d73 100644
--- a/gcc/testsuite/rust/execute/torture/trait13.rs
+++ b/gcc/testsuite/rust/execute/torture/trait13.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo(i32);
 trait Bar {
     fn baz(&self);
diff --git a/gcc/testsuite/rust/execute/torture/trait2.rs b/gcc/testsuite/rust/execute/torture/trait2.rs
index 9974f70da8c..d5fd5466fe9 100644
--- a/gcc/testsuite/rust/execute/torture/trait2.rs
+++ b/gcc/testsuite/rust/execute/torture/trait2.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     const A: i32 = 123;
 }
diff --git a/gcc/testsuite/rust/execute/torture/trait3.rs b/gcc/testsuite/rust/execute/torture/trait3.rs
index 6fe92ef70f9..668b43760b4 100644
--- a/gcc/testsuite/rust/execute/torture/trait3.rs
+++ b/gcc/testsuite/rust/execute/torture/trait3.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 trait A {
     fn a() -> i32 {
         123
diff --git a/gcc/testsuite/rust/execute/torture/trait4.rs b/gcc/testsuite/rust/execute/torture/trait4.rs
index 3b2d000780a..61c2d158433 100644
--- a/gcc/testsuite/rust/execute/torture/trait4.rs
+++ b/gcc/testsuite/rust/execute/torture/trait4.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo(i32);
 trait Bar {
     fn baz(&self);
diff --git a/gcc/testsuite/rust/execute/torture/trait5.rs b/gcc/testsuite/rust/execute/torture/trait5.rs
index f9c0dfdae74..7cd7d1a19ef 100644
--- a/gcc/testsuite/rust/execute/torture/trait5.rs
+++ b/gcc/testsuite/rust/execute/torture/trait5.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo(i32);
 trait Bar {
     fn baz(&self);
diff --git a/gcc/testsuite/rust/execute/torture/trait6.rs b/gcc/testsuite/rust/execute/torture/trait6.rs
index 74363c2ddac..de5ddc1ea9e 100644
--- a/gcc/testsuite/rust/execute/torture/trait6.rs
+++ b/gcc/testsuite/rust/execute/torture/trait6.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Foo {
     type A;
 
diff --git a/gcc/testsuite/rust/execute/torture/trait7.rs b/gcc/testsuite/rust/execute/torture/trait7.rs
index fc1bbe87170..21f1575218b 100644
--- a/gcc/testsuite/rust/execute/torture/trait7.rs
+++ b/gcc/testsuite/rust/execute/torture/trait7.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Foo {
     type A;
 
diff --git a/gcc/testsuite/rust/execute/torture/trait8.rs b/gcc/testsuite/rust/execute/torture/trait8.rs
index c26737f58e6..69e784ef3b4 100644
--- a/gcc/testsuite/rust/execute/torture/trait8.rs
+++ b/gcc/testsuite/rust/execute/torture/trait8.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Foo {
     type A;
 
diff --git a/gcc/testsuite/rust/execute/torture/trait9.rs b/gcc/testsuite/rust/execute/torture/trait9.rs
index 738d1935291..a1642f6018f 100644
--- a/gcc/testsuite/rust/execute/torture/trait9.rs
+++ b/gcc/testsuite/rust/execute/torture/trait9.rs
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 trait FnLike<A, R> {
     fn call(&self, arg: A) -> R;
 }
diff --git a/gcc/testsuite/rust/execute/torture/transmute1.rs b/gcc/testsuite/rust/execute/torture/transmute1.rs
index 40dcfdee0b3..d89affd5b82 100644
--- a/gcc/testsuite/rust/execute/torture/transmute1.rs
+++ b/gcc/testsuite/rust/execute/torture/transmute1.rs
@@ -5,6 +5,9 @@ extern "rust-intrinsic" {
     fn transmute<T, U>(value: T) -> U;
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 struct WrapI {
     inner: i32,
 }
diff --git a/gcc/testsuite/rust/execute/torture/wrapping_op1.rs b/gcc/testsuite/rust/execute/torture/wrapping_op1.rs
index ab4afd7ddde..e0c100cd20c 100644
--- a/gcc/testsuite/rust/execute/torture/wrapping_op1.rs
+++ b/gcc/testsuite/rust/execute/torture/wrapping_op1.rs
@@ -1,5 +1,8 @@
 #![feature(intrinsics)]
 
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "rust-intrinsic" {
     pub fn wrapping_add<T>(l: T, r: T) -> T;
 }
diff --git a/gcc/testsuite/rust/execute/torture/wrapping_op2.rs b/gcc/testsuite/rust/execute/torture/wrapping_op2.rs
index b24ebce56f1..69289928100 100644
--- a/gcc/testsuite/rust/execute/torture/wrapping_op2.rs
+++ b/gcc/testsuite/rust/execute/torture/wrapping_op2.rs
@@ -1,5 +1,8 @@
 #![feature(intrinsics)]
 
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "rust-intrinsic" {
     pub fn wrapping_add<T>(l: T, r: T) -> T;
     pub fn wrapping_sub<T>(l: T, r: T) -> T;
diff --git a/gcc/testsuite/rust/link/generic_function_0.rs b/gcc/testsuite/rust/link/generic_function_0.rs
index 58b8eb13db6..179c822c7fc 100644
--- a/gcc/testsuite/rust/link/generic_function_0.rs
+++ b/gcc/testsuite/rust/link/generic_function_0.rs
@@ -1,3 +1,6 @@
+// { dg-xfail-if "https://github.com/Rust-GCC/gccrs/issues/2349" { *-*-* } }
+// { dg-excess-errors "" { xfail *-*-* } }
+
 extern crate generic_function_1;
 use generic_function_1::generic_function;
 
diff --git a/gcc/testsuite/rust/link/generic_function_1.rs b/gcc/testsuite/rust/link/generic_function_1.rs
index 8fb0788e388..46d0e825b9d 100644
--- a/gcc/testsuite/rust/link/generic_function_1.rs
+++ b/gcc/testsuite/rust/link/generic_function_1.rs
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub fn generic_function<X>(a: X) -> X {
     a
 }

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2024-01-16 18:05 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-01-16 18:05 [gcc r14-7865] gccrs: Begin enforcing Sized properly and support anti traits like ?Sized Arthur Cohen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).