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

index e9e79181646bae865f603586d40763d6fefbdf23..541a0100ea825b025c842827df067363f2bb84aa 100644 (file)
@@ -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;
index 8c575a7cc1c4070cb94dadafaff3e88c267986ee..7eb9142322ec992aaa42506050c133ff6a8c95ae 100644 (file)
@@ -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))
 {}
index e85b5629a6218df50a5dfc5e104f6ba2a93a74d0..27286ac287706d27d37db56d50accf93a9ad3da2 100644 (file)
@@ -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 ();
index 0a62dd11ede9412d4f91730c54b87dbfd811097e..f8593998527f37daa5013471d3897b4aa85935f0 100644 (file)
@@ -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 ();
index ee7dd0830e36bfc75c1609e13f4d5bc6ac5c83e4..4f779d170779c76bd3f55a52f1db0c33d654fc28 100644 (file)
@@ -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 ();
 
index f2dd191a04a2563d8286b6044cafbce3e2c9c111..17827753198ce72d1a224ccb4519a439abc8b0bc 100644 (file)
@@ -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
index ae433e859acd3690f8c3ee724e06eee7c0f89800..ac9d0e9ea24e5880dd66df8795a21e1f90eaeb27 100644 (file)
@@ -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
index 0cbcefe9d6cee79bb5d3fbfe6b2aca1ec37c5aea..0491e0fe17519836c338436417b8e0642227dfd5 100644 (file)
@@ -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;
index c3bc14b09893d6d270cae969e1c1fb423786ce01..03ee74aeb1057a923ce2cf5e46d32ea0cc666d28 100644 (file)
@@ -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,
index b9b129b06671c6a44a99991b1862038f8d2ccd8d..31b486958f4e5705b887253839fc590d6e263615 100644 (file)
@@ -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
index 70622593bcd1685ac93ab48fe6ae39c0c64526d1..46954683875b98fb809ed1abe18077531499f5e6 100644 (file)
@@ -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));
 }
 
index 5947c21770725dfe4e2d444df987e50454fd87c6..6239a83f6073b1e3d5a552662fa80ba91fc7431b 100644 (file)
@@ -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
index c50836cfd726476d8343517f46de2cc07856caca..647c29f3b2e5a856889dcd886150f1380f92a9ae 100644 (file)
@@ -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);
 }
 
index b78d4c229746fa81c56b72c27424533f57c6fa20..f62885faee94dd493f488261b085bae43030f63c 100644 (file)
@@ -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 ();
index d9fb85caa83ebf992c0210be0714d29399b44b8c..67d073d5e1534e696a40cd93b02f5ddcdf4a5b68 100644 (file)
@@ -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);
index 1ace9fbbf3058f134dd2ba1920e4cb457f53f6d2..a02e6f63eb97ff853b85c0a6766571e0784a1905 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 mod core {
     mod ops {
         #[lang = "add"]
index 193e7b5b6980fb69a9b3a32f2888cb4bced5842b..bd6f3b27547c1f60917d10f6f59d963a6e0dd50c 100644 (file)
@@ -1,4 +1,7 @@
 // { dg-additional-options "-w -fdump-tree-gimple -frust-crate=example" }
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo(i32);
 
 trait TR {
index 7d185964e50a31a6c707450d4d34883182112fc2..469fa942ea0c5f1a2da49f2d5937bfcb39b4b0e5 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 fn test<T>(a: T) -> T {
   a
 }
index ff2c8b88a8abeb2699a3300532a506c84518cb1f..b647da7b59573580980aec6f62317b45989c5e4e 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "fn_once"]
 trait FnOnce<Args> {
   type Output;
index 6244a6bf1009bd65d865fc1eab94ebe0c4e88f4d..5036410aca58fd7061928d1ac6011d71bd0611dc 100644 (file)
@@ -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 }
index 2529a1c0fa8497b7903a1ebf0c67a6ce05172186..3a2989cc8d02be2df28c68c60519c61a8ec12b1d 100644 (file)
@@ -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;
index bcad8ee6a197cb08f399a0dfdb0574e5ce49e442..5d4ca64c81d849bcc41f715f4f699792659b4da3 100644 (file)
@@ -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>;
index b0bb2624a2c3fea6712071d2cf424681f28e4187..c7810830f466099d659ea680029aa078b8b68f21 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Bidule<const N: i32 = 15> {}
 enum Bidoule<const N: i32 = 15> {}
 
index 131822820b0efce6802d66921335c34c25100deb..779aad78e11d905c91458a3181ff23ab6d87a4a2 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Clone {
     fn clone(&self) -> Self;
 }
index 35284d8fa3b7bdceee5de9e910a676ae0dc2dbb6..1c7d4737bfe98be687faecfc61385bd2b86c07c0 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Clone {
     fn clone(&self) -> Self;
 }
index 564555f896f2f5ebd1f8435fe7748f3757ee24e1..7802e8fd8000bbb81bd673d3d88364f0000c15b3 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Copy {}
 pub trait Clone {
     fn clone(&self) -> Self;
index 0254754f7aecc31f1a81dee11b10648d7a645f74..b7bf7a78acd1b3eb901af861e4021d12e816f12f 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Copy {}
 pub trait Clone {
     fn clone(&self) -> Self;
index 79454202aadf85fd9db5588626979349583794ea..11a70bec6d4615ef2f5010e27c166c2dec77e589 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A>(A);
 
 fn main() {
index ba07239207a6adfd10a6b8134e1f6973f8552f62..7003f7abcf7017e8e33c4c798e91223a178e39f8 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A>(A);
 
 impl Foo {
index de1bbf5dafb12a27c178ad7077418aa9dfc7e972..e9bdb3a28457a364e5b0fb039c93ac5bfc17705f 100644 (file)
@@ -1,5 +1,8 @@
 // { dg-error "expected .i32. got .i8." "" { target *-*-* } 0 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 struct GenericStruct<T>(T, usize);
 
 fn main() {
index 4d3b9e1777c1ea3c2ffb077d6bfce9243f4ee7c9..10b5880d5bcb14cf8e2524ce3eff47b1683b62f1 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<T>(T, bool);
 
 impl<T> Foo<T> {
index f1ac8b0314b43bf4c2d6fb0ead5aab82a2ab55e3..b32f56679caf3c7204cc4de56b673ff96a2eb0cc 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 fn main() {
     bar();
     // { dg-error "type annotations needed" "" { target *-*-* } .-1 }
index 5812b1330388420fb5855addca4c2441c394006b..fc203abc4510f9364e97b31960a547692c15d65c 100644 (file)
@@ -1,5 +1,8 @@
 // { dg-error "expected .i32. got .i8." "" { target *-*-* } 0 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 struct GenericStruct<T>(T, usize);
 
 fn main() {
index 2d4210588fb50dbaf35c9b85ca41c2c0d0b9f360..e28953c14f8c74287e4c1cc564d4c7f8a49051a2 100644 (file)
@@ -1,4 +1,7 @@
 // { dg-error "expected .i32. got .i8." "" { target *-*-* } 0 }
+#[lang = "sized"]
+pub trait Sized {}
+
 struct GenericStruct<T>(T, usize);
 
 fn main() {
index e8fe23cd2688ae34e8e48801c74a6f4d7a9243be..31b681abb10efff1583ed025a6de317379c48e8c 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct GenericStruct<T>(T, usize);
 
 fn main() {
index ad5b682d0ba732148d5616e6f0d2f57510ce41b8..00b93c33ebee083df37756beb5f4be35e4291061 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A> {
     a: A,
 }
index aeb91a6fb419808afada1bd94e8f1dd97ea19ce3..f2cd607a330cbd0c16b0dde054862e2e667ccd3b 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A> {
     a: A,
 }
index ceefc5d2c6a3e51fdb8126746027cb201b8a6341..99df0c9b58cc64c5937e737310f652c509f96e39 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A, B>(A, B);
 
 impl<T> Foo<i32, T> {
index ffa367b69c34d51d226c921602784bdc2cbbdc33..7bab19a1ef03c3358c0056d51586ff7ddb3974c0 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub enum Option<T> {
     None,
     Some(T),
index 46c85eea91e8aba738f961e2e844ac67d099aee3..15d4bef08c2af8842bd0eb180ad95e28f8f843ef 100644 (file)
@@ -1,4 +1,7 @@
 // { dg-additional-options "-w" }
+#[lang = "sized"]
+pub trait Sized {}
+
 impl<T> *const T {
     fn test(self) {}
 }
index aea86a821c773e25fe0ca657247322f8626dbba7..1f77ba9d31d6db460a3b0a554af256813234a3b8 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait A<T> {
     type Output;
 
index a9049de96fba562734bfb3837a4c7010b2bc8b79..cd1da47362aa24775a46ccfdc7b79eb8bf83df11 100644 (file)
@@ -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;
index 23d7700545244221232ed6560da7107fe82cba68..d40005ec5d97e19903d743e8b90c3b4a476bbc19 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo<T> {
     type Output;
 
index 462426b679dad20c0ff5d33fb8d991bf209f60d3..8960ebbea63d299b469d7b094cc1379d0cfb2524 100644 (file)
@@ -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) {
index 25d30faf4aa9678e54752bceeb7ad6eb87f14dc3..cfe01b5b4db57ce73b1f148931421e65aab76481 100644 (file)
@@ -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]);
index 6d265cb6044ae6e475830deafea9cdea91951ce2..115e6aad2f158ddf833e57cefa96e5773157730d 100644 (file)
@@ -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;
index 5cb9caf81f0a00ae29f191b1794034d940471f72..86eeb98453ac0a713472a02864e9d2ab50d19d16 100644 (file)
@@ -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;
index f5889698d70e5a8aad2cca17c6e113dd7cc438f6..a6378239519e22c35867e5abdb1ab41c2727ed98 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<T>(T);
 
 fn main() {
index 5c2a9173241d38fdb45d78cda9aeae4b2b363067..a8fd93eea1b125f7e48de8ee033abe7ff27f71fa 100644 (file)
@@ -2,6 +2,9 @@
 
 #![feature(intrinsics)]
 
+#[lang = "sized"]
+pub trait Sized {}
+
 mod mem {
     extern "rust-intrinsic" {
         pub fn transmute<U, V>(_: U) -> V;
index 098b337455fe0c5049769a9ada0ea7326c7c842b..7c85ac4a6b0027d5547cc078fda2eae3520b30e0 100644 (file)
@@ -1,4 +1,7 @@
 // { dg-additional-options "-w" }
+#[lang = "sized"]
+pub trait Sized {}
+
 struct FatPtr<T> {
     data: *const T,
     len: usize,
index 54a51df156fbbb273806b39ed52e9744c081fd8d..79b60b07b5223a055d0d325c1f301b75fcdb535f 100644 (file)
@@ -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;
index 3d7716a1d8caa26d35c052ff80664e002611c173..9251d79290bbe4ddefa3b2be0ab577160b71ce3f 100644 (file)
@@ -1,5 +1,8 @@
 #![feature(intrinsics)]
 
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "C" {
     fn printf(s: *const i8, ...);
 }
index cca12e8fc714c41a6fb373be01ba7fd487402c6d..dac4b2a1255260861efdac2fb9f37d055f6745cc 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub fn generic_function<X>(a: X) -> X {
     a
 }
index e0543e6247c4a071bad0dd1f85589505835c9dc5..6d58f7a6eea3f904da7bfae8390ad1405c2ab62c 100644 (file)
@@ -1,4 +1,7 @@
 // { dg-options "-w" }
+#[lang = "sized"]
+pub trait Sized {}
+
 struct PhantomData<T>;
 
 struct Hasher<S> {
index 79a5866e4aff1143c8d0a72cb58902b1b5241002..45f2415a81316da4c832fa9f78e70f51a58bcd4b 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait A: B {}
 // { dg-error "trait cycle detected" "" { target *-*-* } .-1 }
 
index 1ace9fbbf3058f134dd2ba1920e4cb457f53f6d2..a02e6f63eb97ff853b85c0a6766571e0784a1905 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 mod core {
     mod ops {
         #[lang = "add"]
index 8bfd0bbd92464cfd768c6e11dd33b501ecaa7f8d..01ed287f545ec5d9ac44558363899db42a1f09c5 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 mod core {
     mod ops {
         #[lang = "add"]
index c627ac09cecbca2538525d1dac1fe7569558fd5b..a4542aea00b080fef10c3615879529067850d2ad 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo<T> {
     type A;
 
index f73b63d0cb679ad38217120acfb6b0387d5af51c..1c46fee6a87024e013b3f6284aaed2a584efe755 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "clone"]
 trait Clone {
     fn clone(&self) -> Self;
index 6be1d6d6f29474bbfe5cb6ef618bfc6bdc552e9d..46c53e9ce7aed684066efc8143aaec338376d91b 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub enum Option<T> {
     None,
     Some(T),
index b2a70805e758d2f8a24deeaf05daa5ba4a9f6e9b..dd41ff89346d4d1abee92fd39926f9c8f861225b 100644 (file)
@@ -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;
index ab30ccc7da43f4fb4ff196bf4def0682a5834a73..071b3dae21c31396053e6e70efd496139b7331cc 100644 (file)
@@ -1,4 +1,7 @@
 // { dg-options "-w" }
+#[lang = "sized"]
+pub trait Sized {}
+
 fn test<T>(x: *mut T) {
     let x = x as *mut u8;
 }
index 9ad2a55404f78fdebc2650041f4a80a63945c654..b1637ac026021bf6de621242bac9de89efba5bf4 100644 (file)
@@ -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;
index f359ea4fb15def1cc8e129c4d17537b08b8b102d..e91e347b2ea6cf33df581dbe8d64a97a0a23a8e1 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "add"]
 pub trait Add<RHS = Self> {
     type Output;
index 37c8e30b10603bff77d5500b96f0ba758ee6ea86..9f7c0c01bbe59a363876f4d9e79711803e291588 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "add"]
 pub trait Add<RHS = Self> {
     type Output;
index 67890388be31ef3648806be0b557fcfe2eba0c18..c95ce43083ab5fa66947465e9e969994ca03e5f5 100644 (file)
@@ -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,
index d1459752ea515e05a25d6080289c19bcf20f8fdb..8701b204fd329c96a4b939e29a3fb2e4769b1201 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Hash<H> {
     fn hash2(&self, hasher: &H) -> u64;
 }
index ec27a0d10dcf1c2592b6c8df329e1ada980ce1cc..8adcb9751098cd808f0a0b12e92ec8db06b5b0ff 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     fn bar(&mut self, other: &mut Foo);
 }
index 46f35209f4dd2b1eaaac1cbaee82155e96839272..981e59926fbb95cf096b1034b9e5351f1d4b65f3 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     fn get(self) -> i32;
 }
index 7d1c9a10c2700464bb55154207cc6d5afd37ccfd..28f170e51cf194cf0d63e88d26775d171c7a582b 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub enum Option<T> {
     Some(T),
     None,
index a4f235c14dd3c8333bdc91e2967771ad9c7aed87..4af57c866525060129ec0c4d034b39acbb7f084a 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo(u32);
 // { dg-warning "struct is never constructed" "" { target *-*-* } .-1 }
 
index 563345efee36ded034edf2b94c242a2135c0f474..9f4d3e1b6c18cd7169aaa0eebdf327bcb87ec42b 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Foo<A> {
     fn foo(self, _: A) -> u16;
 }
index fcf1efcd171cad0ad188f74624ce7a8683443a88..f0af551f87ea4691a34ebe4f4d03b14b29837fbc 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Foo {
     fn foo();
 }
index 7317f3f5151b16ab07876059e0bedbb9351cfcf8..b25820dadfb525801a06dfc3e253309e2b9eecfa 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct S;
 
 impl S {
index 77bf78d13a7fe805fc2709719d0d778624b28477..3b9ad95467967c4bd45d64244c4b6580868f36b3 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Foo {
     fn foo();
 }
index 7a8bb2aca5029dde5821073b5b89a0f288beba2c..a3ec228c0e1279259f1755c00e3f5f7e1ed20aff 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "fn_once"]
 pub trait FnOnce<Args> {
     #[lang = "fn_once_output"]
index 199bc13aa68682398649037282584faf71cc8709..5bbde65928b4551b6b85fb50f4db932468f81196 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Alpha<T = Self> {
     type Beta;
 }
index f333888879a41d1f574c2e94ee3e27bf4a992fc8..318f0a61b7ec4076aececa7cf6b3d958157eead0 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Add {
     type Output;
 
index 3e43e54104970cd22cb916806a56b44da2a61087..057d7c71633ec86ddc78feb08a5ae400006b3236 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "deref"]
 trait Deref {
     type Target;
index 48ab72b92001afc565d26cae972ef7fc6d370e54..1c933386aa46df4832dbe043639c931341308c45 100644 (file)
@@ -1,4 +1,7 @@
 // { dg-options "-w" }
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "deref"]
 trait Deref {
     type Target;
index c955df4f1c6b67a4884201f4739a229f77ab6c81..fc158c39bb4b83de8bd3b18f109de4f709842bfb 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct A<T> {
     // { dg-warning "struct is never constructed" "" { target *-*-* } .-1 }
     f: *const T,
index b0c7e36ea445a16f65608e85de330e707b37b060..38871b337c126679fefb34c1e1b84f1fb9eff577 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 fn main() {
     struct Foo;
 
index 243cf100539a880d4cadfd4ec94698de7419889a..83130336ebec6a34cac3c98d38891f77fb78698e 100644 (file)
@@ -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 (file)
index 0000000..a61fef8
--- /dev/null
@@ -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)
+}
index 531cbf4f66330213ea307947eb66ff0b6c59f0de..e42b5573d1d169fbc22f034ff432e45aeef539e2 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "C" {
     fn printf(s: *const i8, ...);
 }
index f48e3a1bfe0a193170b3eb0e73c2e2c0b2733d36..9e450ddda3aea908e31c88fc91fc0f08cbe0551e 100644 (file)
@@ -1,5 +1,8 @@
 pub use result::Result::{self, Err, Ok};
 
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "C" {
     fn printf(s: *const i8, ...);
 }
index 930b192c3d309fb817f8f7181cfb264ffd97a7dc..2d536a54725217671e66e22d55f4a7a69d1e2a2b 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct S;
 trait A {
     fn foo(&self);
index 971bd778054eb46798f34e20fbca8abf05afe85a..5c51b78065c179428053b6fc127a90d826f4bbff 100644 (file)
@@ -1,5 +1,8 @@
 // { dg-additional-options "-w" }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 macro_rules! foo {
     ( ( $( $Trait: ident ),+ ) for $Ty: ident ) => {
         $(
index 9f3cbca012ceb5beddf97417f983d1f169cfea74..e03455b1b01fcc60df8984ee5f4d4694610b8e55 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 macro_rules! define_trait {
     ($assoc:ident, $i:item) => {
         type $assoc;
index afaca9bc96b1f104f7b78ae993c2e7ab6ee00acf..a6a2afdad076c6668cbce1877f3dd0a5f75875f3 100644 (file)
@@ -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> {
index 7151f3a83bce7c4248d05fcda535e03ab54d2f59..f9d048e8ab1d2e6e6761c4e0cd85537dffc1851e 100644 (file)
@@ -1,5 +1,8 @@
 // { dg-additional-options "-w" }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 macro_rules! t {
     () => {
         i32
index afb20263566c546e70cd444e49590f0987069175..d3b3f806a6a089d7e38adc6f8be0d342eb48c737 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 macro_rules! foo {
     () => {"foo"};
     (number) => { 12 };
index 343f6282a88768b392f1cc904cbe21ec38147383..7e4f5a14da5dda7eb447c46eb04383ff4eecb883 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Bar;
 
 trait Foo {
index 1c138e837b24054c0e5764cfc0d6c403655a84e2..b2eadbe2c54ce7ed935ef626bec37dc585f9e412 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     fn foo(&self) {} // { dg-warning "unused name" }
 }
index 6c3109957f90b1fc0456a9f541ce8981cd511f64..322b3c50afb45d7e19cc4de08945657b1128f01c 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub struct A<T>(T);
 pub struct B<T>(T);
 
index fbe79f00bde0246a6ab82beee99d9ee2786a7201..ba1042a9bbe8c2199616c24dd13127f91eee45a4 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     type A;
 
index ba5d9a3936c94a9b6e165b26e47b7eaf54ea8295..a2662c25e2189417c16233afe4c85aaa58d72a76 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     type A;
 
index 72c1b95c09a5056c9bb82feaea0fab6b0e931f58..b4342e8c4cba8369f889e2aba697d1bd91b32a8a 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Bar {
     type B;
 
index d5c7bf488b7d33371fc8bbe0f12f295a16af1a2d..02877dd727edaf28adced9ad90d50bcb5bf792a6 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub enum Either<T, E> {
     Left(T),
     Right(E),
index 0361931c50c0b0b40234c5becf63fe78b6fb2814..5ebc94f1f989b88de6b588c232d984b2f89ec516 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub enum Either<L, R> {
     Left(L),
     Right(R),
index 35b3160e9a8576674df6bd1c4394e03b74db60c2..21baf8000e714826f398460315a5d640f0439406 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub enum Result<T, E> {
     Ok(T),
     Err(E),
index d1ce0afd65431a55002d0193d29860312bb60423..648b7b9adb763ac5eaff4d65220f71e63d1ea944 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 mod orange {
     mod green {
         fn bean<T>(value: T) -> T {
index 487ed02420902028a10f66eb06323386f5d192fc..1680c24814412794372910e3306cc1e54db1458f 100644 (file)
@@ -1,5 +1,8 @@
 // { dg-additional-options "-w" }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Adt;
 enum EAdt {
     V0,
index 310da661fca8223d03818203e6b1b88f3457fb18..a5f0c2b78fb41716bd86f4ed6eca5ad549067c76 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 mod mem {
     extern "rust-intrinsic" {
         pub fn size_of<T>() -> usize;
index ae623c345579620a9e332aec254dab9be8ce8d33..c7037af8cd4e894cf1d15391e3a60e5dc6aa22d7 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub struct A(i32, i32);
 
 trait Clone {
index bf181df7045e34dceb154b5921b6cf36c468e8be..2be703722c2e02a92bbc36f10f2b1227cc71b220 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Foo {
     type A;
 
index 73a47fe061bbf8ddaee5ff0e7f6f1e430bcaf918..670ab0a799fb7a605f8d156fdf86a51081f5ab6e 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub fn main() {
     let a;
     a = foo { a: 123, b: 456f32 };
index 87bcdc8f305d4ce011775f24185b92bd3e5249db..b32eddd6c482b1e4b4fda149a605f882e996b9b0 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo {
     a: f32,
     b: bool,
index 8473d49587ba6d504b675c08433779d64135984b..1a17e842a0dc6ef2f51d69084b7d7b536440edec 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<T>(T);
 
 struct Bar<T> {
index 3c8f5ba0058d3de7964a10f3f0a3e80923041efd..9d5e719d774f5d74e7337fb5c40b43ad37338277 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<T>(T, u32);
 
 type TypeAlias = Foo<i32>;
index f31be584e09b518113eb8c863a788c4c0243b5e4..9347b24d2d41b69e21799420d32c1d969a19ee72 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct GenericStruct<T>(T, usize);
 
 impl GenericStruct<i32> {
index 9eb598f02a84b6e62bb2b78e25e7ac3540476fb5..00b26ec0968cf8c775058db08981961e83a0dcca 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A> {
     a: A,
     // { dg-warning "field is never read" "" { target *-*-* } .-1 }
index e51a4079e30e455b32a569eb818b6cc28ffc3356..5be39ebff91cc42e4748ddccc25a71969e70af4a 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A> {
     a: A,
     // { dg-warning "field is never read" "" { target *-*-* } .-1 }
index c16a67c4dd559ba179098101e07fe53ec0ddaf0d..2b1f31c0217ee87851ede73c29e2b24e5ab607d2 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<T>(T, bool);
 
 impl Foo<i32> {
index 15b9d7b55e73385c04695f0fd29353a83cc470b0..a9fa2ebdf0bc188e428c6f0e99d7200d8b214771 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<T>(T, bool);
 
 impl Foo<i32> {
index d52314999b97237c6b75fd13cccfa407a0d9afc4..9a04158e4c95a95c63f9cacb04956890903c8b8e 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<T>(T);
 
 impl<X> Foo<X> {
index 4c98b86a1b93f5a91deb724ed1494a462551f851..cb7b1fa7404d0aac9e2c7901ccddf8f95ff3d99d 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<T>(T);
 
 impl<X> Foo<X> {
index 9a5b4cb48dc8e19b4c4434b5ac76505d16492f2c..c98599fffdacb4618f79e046a9e069f1a895ba27 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<X, Y>(X, Y);
 
 impl<T> Foo<u32, T> {
index da0ab992243fe435b94517073e0044ca5d0ff999..e720b4221497fc6891c657f1cb0e41ccff5d8901 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo(f32, bool);
 
 struct GenericStruct<T>(T, usize);
index 8fe1cffdf7dadd8b3628e8a6e53308ae92dacd35..92b022e3746f93fd3496f5308cfd255ea55308b4 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A, B>(A, B);
 
 impl<T> Foo<T, T> {
index dc4e935cac77429ddb91b971adde4fc4b1b259ed..1c74ea429991157e6248379a0d7ba22c979e8c78 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 fn callee<T>(t: &T) -> i32 {
     // { dg-warning "unused name" "" { target *-*-* } .-1 }
     32
index 465ebb0f5e145f5c5e25eef38a156ebf3d70e7f8..b838e6e8262cd99cfe68aeb28c7b6dc530c0449d 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 fn callee<T>(t: (T, bool)) -> i32 {
     // { dg-warning "unused name" "" { target *-*-* } .-1 }
     32
index 2169e3649c61a7cb343e5693d327a3649c271d7d..bf4dfb59f6bb6f7885f7d9838f4f3e6294e397bd 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A = f32>(A);
 
 fn main() {
index 0de45a8c404ba6433f25af707131094e0463b096..ce782c0e98760515d65b33b3011b57988e09055c 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A = (isize, char)> {
     a: A,
 }
index e7792e3efb31784ba5983d32eabd2b86a005a9a5..4fe952a5da17cf32810dc0181a85a80cfec94b64 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A, B = (A, A)>(A, B);
 
 fn main() {
index 522e16f32f7ee0007b8ce0991e81876f0a4c832a..0111add4138a5a4931099e89e63db1e12d8bd996 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 // github issue #415
 fn test<A, B>(a: A, b: B) -> (A, B) {
     (a, b)
index 9871638dd9fe678e98d167face69c3dd12e87401..c4ca4db81e0151b31f9c9a0fd4f7547c1243893b 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 // github issue #415
 fn test<A>(a: &A) -> &A {
     a
index 8cee8b00fb20264a085912959e449b396f519da8..c1ffd9c245fbf4bcff40fe7e35b21d01b7835b52 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A, B>(A, B);
 
 impl Foo<i32, f32> {
index e09a1044574fbc6deb565b89af482603194d7cd9..e9c693e6db76029fd7e7720c6d38b7e7c5d3768c 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A, B>(A, B);
 
 impl Foo<i32, f32> {
index ceec8f7d9c64ee0761c9d43382aa0f21425b9251..4c5dabcbd8bc4052ad5154e7add40741e3d67d32 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 fn test<T>(a: T) -> T {
     a
 }
index 229f6d1254b76b5b55ed6df7d48fa1fcc06e67ca..24ae58f08602c3a529977a03983480f295706a59 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A, B>(A, B);
 
 impl<T> Foo<T, f32> {
index 68ad4bf9a96f1d6a6bcbac4389ee682d96ab5e42..f8e2f36ef734db3c49b81d8e56edc9554297bc82 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A, B>(A, B);
 
 impl<T> Foo<T, f32> {
index 21b9cae7409656e7bfa88f4eb59fc87ecfa7d683..49c4539d91d73299a5279290614de7177e2ddea0 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A, B>(A, B);
 
 impl<T> Foo<T, f32> {
index 915cc49c68b8fc5be4e95796babdbdada749d485..54bdf56b63fa5672a64940f16af729251e494b92 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<T> {
     a: T,
 // { dg-warning "field is never read" "" { target *-*-* } .-1 }
index b7f430289926046bebcaa3462dc06b35b0271a38..df27fdd8f6eb4c65c7b36e5dc2ae0f6dc22e9173 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 fn test<T>(a: T) -> T {
     a
 }
index 5456b6dcb9703d76040ef497296a367c9d049bd4..16b85fbcb1891d7c172e5cf1977a54a493688889 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<T>(T);
 
 struct Bar<T> {
index e8e5ca69c3d697dc68dd8a195a5eb9f2f8987648..66454d6166dcecda4ef847489d413d19e561a049 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<T>(T);
 
 struct Bar {
index 036d85568f0cfd059cc815ee4f0e60e31516c55f..bc6d09b9919c3d5443ed2abe8f9f2bf53910e862 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct GenericStruct<T>(T, usize);
 
 impl<T> GenericStruct<T> {
index 307c34f3e9b18dfcc9622dca652a32072bac14eb..3d9d748ef98cd9d4544bee48d99e9db3ee503711 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct GenericStruct<T>(T, usize);
 
 impl<T> GenericStruct<T> {
index 6b2339f38f3de0fced051f48336e954ada849753..a6cd8f8553f4ff6e504a147984c5f2c41fa014c5 100644 (file)
@@ -2,6 +2,9 @@
 
 #![feature(intrinsics)]
 
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "rust-intrinsic" {
     pub fn size_of<T>() -> usize;
 }
index 4e510e110877bd9d2d287c1c4d4921ba70d145f8..0e2634592379cf2eb9f4392ba4ed013b6f3d3fc9 100644 (file)
@@ -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;
index da85fff5cd6800e41b9dd1dffcbcdc4a16ecf341..754aacb3449e6d854984f5882b734c2b9dc22b39 100644 (file)
@@ -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 }
index 8788da5c7fca7fc9c8bb94ba161ed88221c84b24..deb19bd431cd9e8390b442ad0515202869c43127 100644 (file)
@@ -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);
index a8503cebf533bc5cc2e640d2db056d445975c891..819e329058c5bd1eca32613f47ae57910702f9a4 100644 (file)
@@ -1,5 +1,8 @@
 #![feature(intrinsics)]
 
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "rust-intrinsic" {
     pub fn size_of<T>() -> usize;
 }
index 201a241d45d9a2ef791bea4fa43de2d260322d97..d23774b2c0bbb905846828f93e7a6480c0937874 100644 (file)
@@ -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;
index 0269823fb6d59e7fcafd6ee9950f739cb755c674..5b526fdd52dbdfa3c35abebee2751a89285744e3 100644 (file)
@@ -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")]
index adb489116488130ed259e515d7eb47d74e469077..bee8952f368378be5716e63666aa021334ebb599 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "C" {
     fn printf(s: *const i8, ...);
 }
index 18bc9bdc62ec5516d759cb078ed7d8af2281f8c0..775e70d9d23e66f300dbbf4c11c4b63b60eb52fb 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct S;
 
 fn foo<S>(s: S) -> S {
index 2e5a81fe516bfc33dc3521982b00ab8c5ef3d10a..4186d54f4bc191957842e3e9fbd5b8ed5a4a9ccd 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Foo {
     type Target;
 
index c1a4609ba86666b63674734455d0736804567fa9..d9ac9124601801827a6d189e6fbf972b8a9137e7 100644 (file)
@@ -1,4 +1,8 @@
 // { dg-additional-options "-w" }
+
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "C" {
     fn printf(s: *const i8, ...);
 }
index 88a865d66dcfc47d9ed65d5a08a77cc99986c77f..3df27b8335efb6170fd0ec9337647cddfc875449 100644 (file)
@@ -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 {
index d8245f3e0d851a734247e48afecac66f0b64a3ed..f96b5c3464320f7ad27f5347d2c1f021fd140794 100644 (file)
@@ -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 {
index 466f7ee7a147611129154a86a2bcd5676423437f..cf6643eec25d426d35f816bee2ddb336025d47b9 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait A {
     #[must_use]
     fn test() -> i32;
index 7040c862e75e025689a4376bf16b4686b3ed5be9..ad7a10b0a82ed82bacb186e5f8e94a6b403f4be3 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub fn main() {
     fn test<T>(x: T) -> T {
         x
index 89e76aeb5eb60bcd43751821cc48821e3fc5b83f..d6c5adcf89a2d40cb65fd2a537f11ed4b8de509c 100644 (file)
@@ -1,4 +1,7 @@
 // { dg-options "-w" }
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "phantom_data"]
 struct PhantomData<T>;
 
index 869461622765286244b9bf68ba8f6d3783c3229f..604fee8e3285cfc334e198ea0ef8bfe0927cc07b 100644 (file)
@@ -1,4 +1,7 @@
 // { dg-additional-options "-w" }
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "RangeFull"]
 pub struct RangeFull;
 
index 90357738a81d26e29cd2bee102daf262b6e09caf..8929501de6f5d5ddbb0488e05ae5f19bd797657e 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     fn bar() -> i32;
 }
index 41c82f01b6ddcd2402fce86c48bae5722ea7269c..02383a5610aa1ee3d3167712add6fc235441900d 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     type A;
 
index a55b965baf0bffae71889072696c8cda0457817b..8648022b8fe338e706f070344995bd2166302a2c 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     type A;
 
index 326f03907567fcb83062879ed1d8a210b7de4773..5d9c81943d9c3245a0a9dc8a059fee3c4deb1807 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Trait {
     const FOO: usize;
     type Target;
index 8bca0d5c1f6c4f0e564c00327400fbe126059aeb..ab546a88fae7cbaa0635268a446a8baef9a4b6bc 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo<T> {
     type A;
 
index c8c40b78b45e7550245c1c17e338bc0ab24d9829..c1863a8a2f9bc63aec9d6e9abce95e4fc10649ff 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo<T> {
     type A;
 
index afc4a86de6d5ed496b26417cc5add5964b959f20..8c8e682e6c163a17f7926d81379235bce053aae0 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait A {
     fn a() -> i32 {
         123
index 6da8bcb0082d600598031c24efb731f0d7f92a74..268c2bd50c55dd0a4dcab2387ecf83557f6fc2a8 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait A {
     fn a() -> i32 {
         123
index 63319dd2daa78314f3a57e67f96a42d1b3e881db..512152e9fdf3c8854dbe01a6e2f3db7467ad82e9 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo<'a> {}
 
 trait Bar {
index 4412656f5351527e1c4255dec12d77288791b634..4be898d4024039c633a7592c423c1599aea22431 100644 (file)
@@ -1,4 +1,7 @@
 // { dg-additional-options "-w" }
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Get {
     type Value;
     fn get(&self) -> &<Self as Get>::Value;
index fc6eb6002e0e57df938641cde51f345e8225e0dd..a9dca948d1b43d1ef4ea2c692494b3b465262596 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     fn bar() -> i32;
 }
index deeb81e0946cfc8d3f996d966b1f29c25534a286..d805da5d2d4d390873ce6dcbb43175c16681f6cf 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Foo {
     fn Bar(self) -> i32;
 }
index 67b012c11f587d82eee65c6a1dc8cd8e7ed63706..49c4db2d34a6fbbfffc90b9437714c66d1875e8e 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     type A;
     type B;
index 445b0658f5c29f32e492f953d72bdce4b4014f1b..c60a2597418b990cfc5ca050265e5a28157afac5 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     type A;
     type B;
index 260dde3f465d9fd40d7e19a84091cd70f8dab494..f11735324f2f6ca8872a4a7374c18242bb6ddbf7 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     type A;
 
index 7bc3384ab412d4274fdea80dc677f8a17a43a5e2..8e4472d529ae6a78e194c8921caf92a8ff1d164a 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     const A: i32;
 
index 459032fb4a2d1c0ba49783ac7d3a7597964fc034..cc0875bd07571cc97cc73d9a203308f055b5ab93 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     fn default() -> i32;
 }
index 89e4bf19b0cde7838fff1affe440cdcfdba51a7c..3a7c37fcbb60bfd93755b4a16709ad5a644592de 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     fn default() -> i32;
     fn get(self) -> i32;
index 461a35de8efd9a42de498b4f4961cd1a2bab3ea7..6d34fb1b0245980e8490b88e6021b12be1eb7295 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 mod mem {
     extern "rust-intrinsic" {
         fn size_of<T>() -> usize;
index af9a55d1b978e377609bc7d4e6a790136ad2f63b..b2a0d07a3d7cb5c11ba16bb0a20e93beabca3507 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 mod mem {
     extern "rust-intrinsic" {
         fn size_of<T>() -> usize;
index 0c6772b5f383c69c94abe1d5343acdc5348c180f..cbb92feb4954db4bb4c88217423d19540e57b64d 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 mod intrinsics {
     extern "rust-intrinsic" {
         pub fn uninit<T>() -> T;
index 7fb86eb5ff089441c8d64dcce670d96a4ab3ed87..eeee01c95cf18597508e0b90de8473b788272e78 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub fn f() {
     let crab = ();
 
index 355064eec1a9521484798c2a0c59d26cb0df16a1..68f5abb5aa018c26dc6e38ea439f7993114e579e 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     fn Bar() -> i32 {}
     // { dg-error "expected .i32. got .()." "" { target *-*-* } .-1 }
index f8f551ba86d7dd79e1771da2ed67150db124aa20..da6c1555304981a72f5502005311639c53d5daa0 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo(i32);
 
 trait Bar {
index d06e47d7e16f03815ff66ac35aa913581d71c54e..ac8ccdf5886bca23f16046fb03097e6d832942ae 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo(i32);
 
 trait A {
index b170692f265c4a81d02f98f072ef8ef6f44d8502..b194e073a911173142618eef45812bd48d204143 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait A<T> {
     type Output;
 
index 376b3c9cc7f6cf6745fc6760c259f6452622d061..3631a092e56248dde4c45ec3824db10884a4b04e 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     fn Bar() -> i32 {}
     // { dg-error "expected .i32. got .()." "" { target *-*-* } .-1 }
index d6d081487b965904fc4c38789103a9de78fb339e..119132f80e88afd26aacf65f5803332ad7882f84 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     type A;
 
index 486301d61369820d1ee7872e26d80439632383ad..4388b5e1cb5f79925a68a0b0e4454acf59abe53e 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     const A: i32;
 
index 8b2fb9bc10d4da1b864b689b776fa603105886ef..4e9dcc167b7b6c9db34f5b652d28f756f1efcfaa 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     const A: i32;
 
index 3579b5a0842ca9c0739de6bb544c66f236c00495..d081dd11e10dc13e58fd57291c63ee1337dea72f 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     fn default() -> i32;
 }
index 825553ce4966eca829ebc2e8869c94704e2228b1..68f3f38f97bd086c4dd6f9086a2079a98e12efe9 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     fn default() -> i32;
 }
index b22590a52bbb66efc99cd7d409c81ac6b00ab054..ccba9fad5dbe3f8575af86aa82a36499dc16a936 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait A {
     fn get(self) -> f64;
 }
index e1aef5397fc9cb02e379cd7ba9ce7a3a2945e4ed..bb3034d0f21cb2007fb496d234b7c3f848b7dce6 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo(i32);
 trait Bar {
     fn baz(&self);
index dc0e274fdd5f6204efff32ea141c335fe03f1104..358035bbc17189a3513b6c917384771667200cf0 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<A, B>(A, B);
 
 fn main() {
index a510332f167c6762972b3b8a779565e7ad5bbfe5..1cef0b983b0a0b930796ab91e5232d5615fcc3dc 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<T>(T, bool);
 
 impl<X, Y> Foo<X> {
index 927e69728c96571375e1e3b10e3bb8d591bad8d1..5861c15cd71d135d3c2b5655c07d6c248df4acc5 100644 (file)
@@ -1,5 +1,8 @@
 #![feature(intrinsics)]
 
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "rust-intrinsic" {
     pub fn rotate_left<T>(l: T, r: T) -> T;
 }
index 62afa78a038d9a4f55d7f6c8dee138e01563ba11..e9564133b5561b5b51bb3a8721cb6befd15a51fe 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "C" {
     fn printf(s: *const i8, ...);
 }
index 8e1502dfa439ea09caff3993076d9df16cd919e2..deca7845f8b3c76d3c65b7c2d6e44065280a3920 100644 (file)
@@ -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"]
index 8fa9445ab62afb30ebca4fe1a022ea133cfcca8d..98ec26143a385485cf77a1dcacf56c38bde9a882 100644 (file)
@@ -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"]
index 07dca44308d08740d52f8e73ff5923ac88a88880..07017760789696558e50051ba0f7ec67ec7dc3e0 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "fn_once"]
 pub trait FnOnce<Args> {
     #[lang = "fn_once_output"]
index 6ca28233d60c464c377d18611d54f8bf08d68836..335f4962104b3aab62503f6f908e8172b6981e0f 100644 (file)
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo(i32);
 trait Bar {
     fn baz(&self);
index 047fd536dcaf439dd6c2c7b3b2fa0ea3c349407b..6be86020bdd79864f91433d1168c5ceef9277727 100644 (file)
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo(i32);
 trait Bar {
     fn baz(&self);
index ca66dfa0506740ce681cfaec4f8b527d9eedcbaa..e88338ae2f3c62da8b1b0471e9f3018e2eec5500 100644 (file)
@@ -1,4 +1,7 @@
 // { dg-output "123\n" }
+#[lang = "sized"]
+pub trait Sized {}
+
 trait A {
     fn get_int(&self) -> i32;
 }
index 39afd3424a404da0d424db4e35e59f16bae3d5a9..15bb811773bd53db814a558dd55b0bf04206e50c 100644 (file)
@@ -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
+}
index 6e0350de3de91222a6ebe52d0adec8c9dad55889..22cfaaae191cf2cedf39255aac91689dfac68b21 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Clone {
     fn clone(&self) -> Self;
 }
index 716bd908f4e8e6a9798015c3463a242a66f18642..7b3a089d7514ee3727f9b8a300bbcaa8831ac7c2 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Clone {
     fn clone(&self) -> Self;
 }
index 218bf617bd6d9d3c1e02218ace379ccd496a3842..c355ac7905f54ef9572b0588c1137fba6c25ae33 100644 (file)
@@ -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
+}
index 4682978bdd0f83702276443eab5ba022e6a06928..19e58e32b16eec5ae94f11d2fd0f4c0ac41a1204 100644 (file)
@@ -1,4 +1,7 @@
 // { dg-additional-options "-w" }
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "index"]
 trait Index<Idx> {
     type Output;
index 59792b29a291e0c4168e186ea8864c2d926caa59..7dfa26fc14e974ce6a9555c326c13287ce26ac58 100644 (file)
@@ -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;
index 8679bb932242afedc993c58b70e52fcf0f874aa5..29f532e5c96ae756b3b42e500fa37bdf7582836c 100644 (file)
@@ -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;
index bbc58f0f37073aa727d42f5a6be3918feb4c90e2..d5c3d895783a666f065f1d38f02ec4771e383d4f 100644 (file)
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "deref"]
 pub trait Deref {
     type Target;
index ce53da2d0339f0db6c59af3645c07014f212242f..6fb42b3167dc64254f359c4eeddb5253317f1a96 100644 (file)
@@ -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;
index 06911074c3076fa498b31e8e8548132acf1397ac..e7a261c1a0ba55aaad1b8ed04c4bbed098aac5db 100644 (file)
@@ -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, ...);
 }
index 96de5d6919432d21220abf4ebda2e883b2bf6ae7..4e6996132de9a323782340f22fa1cb300b9cf9d6 100644 (file)
@@ -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")]
index af4201b7d3ed3301cb0a1f9e041595427b1181db..36291a742368fe833cf3627839c80d91dfc4587f 100644 (file)
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "deref"]
 pub trait Deref {
     type Target;
index 35833dbb813a23ca6b595019e340a44a7330ee71..9c5356ed736c791cf8ac594c6d69bbedffafc67f 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 mod core {
     mod ops {
         #[lang = "add"]
index 771d7eec5378d82b81878932299a590f1176da1b..22182825490c1e2a50dd2fcfb7eec342ee63ea7d 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 mod core {
     mod ops {
         #[lang = "add"]
index 6c15eb3a470ac25def6e068ebc661684735d9a20..bf5d6a7cfbc45d3f7ebb8c71a799ec25a9954776 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "fn_once"]
 pub trait FnOnce<Args> {
     #[lang = "fn_once_output"]
index 53bacaaf2c18f4129300bb464d129f7f93393310..86ed11f51c59bc74b0765469ec232549f424cc27 100644 (file)
@@ -1,4 +1,7 @@
 // { dg-output "123\n" }
+#[lang = "sized"]
+pub trait Sized {}
+
 trait A {
     fn get_int(&self) -> i32;
 }
index 3a7ea1044724bb987786b4c70ae07d999e678007..beed69620a0d1aca9b1df24d19d83c1d3984677b 100644 (file)
@@ -1,4 +1,7 @@
 // { dg-output "123\n" }
+#[lang = "sized"]
+pub trait Sized {}
+
 trait A {
     fn get_int(&self) -> i32;
 }
index 1edc5a5176285345c4827bff66d7515fe564bae0..850b99718ef6fc4306440aa0c53c8b35136060d4 100644 (file)
@@ -1,4 +1,7 @@
 // { dg-options "-w" }
+#[lang = "sized"]
+pub trait Sized {}
+
 mod core {
     mod ops {
         #[lang = "deref"]
index d76d43b61102fcf608ec8fd2c276bb516d64b453..6a3565571ef1e0a571892760c1f253b624710297 100644 (file)
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo<T>(T);
 
 struct Bar<T> {
index f96714d4bae6f46de2caca6033e3abef17823946..b11ccd5374a113b9fa0969d1621106bd2ece922f 100644 (file)
@@ -4,6 +4,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo {}
 
 trait Bar {
index b3b2b480ec24ca301748e99bca87a75b609c8720..1361235b97811563bb97cd29a8b717b36d4b6663 100644 (file)
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 enum Foo<T> {
     A,
     B(T),
index 51a156138449495b2f2c4962abf0ba1772068338..0b1118b4f8d367df2212306b7e32e6f6c463b27a 100644 (file)
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 enum Foo<T> {
     A,
     B(T),
index 846352d048742a802b71ba47613dafdf04022d57..b27985d3befd2abc96c944c5a69a3bb144436384 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Valuable {
     const VALUE: i32;
 }
index b011f92414945671f377740648dce6058de58ebf..46d9cfcac0c3d6c1e65cd5a3e6710a7216a341af 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 macro_rules! t {
     () => {
         i32
index 79a35eb53d81299e51817528b6aa280bf5d8d8b0..e5f630a6d4fe163cc4a86a5f76c3ae4ed3c5a996 100644 (file)
@@ -4,6 +4,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "deref"]
 pub trait Deref {
     type Target;
index 7217d35c4b30da0b7cf856c34af3ef9dd064bf60..9a7865ca979c8770445ff61cceb15a3e63b056e0 100644 (file)
@@ -4,6 +4,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "deref"]
 pub trait Deref {
     type Target;
index ba1ffd1da3613069986a8af3ac9496e82bb07f03..e20618f063508894a218e96f4a23fbe57882280c 100644 (file)
@@ -4,6 +4,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "deref"]
 pub trait Deref {
     type Target;
index 064a77651ad22a123db2cec623df55b992003d08..9aed3933c42a28f50658fb4779451dd20025f9de 100644 (file)
@@ -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;
index 3fa5afd01f306e3c7ba738aecb8f3ebc4cebe4c7..921ec5f6fe9ac725dc3081b51b2d1dce7b5a9f76 100644 (file)
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "deref"]
 pub trait Deref {
     type Target;
index 94bc1cd9d965e169b54d34b65420ef8f9b05bf1e..f0359fb4d80994c361f16acf18280ed672c72697 100644 (file)
@@ -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;
index d525ec44e8ff80c82d1b832240089ce6cf136504..2cd5c69f1e1fbe3c9f89d0ed0a323556a9108c68 100644 (file)
@@ -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);
index fab3a83b7f5f8bc25acd8d5f5386e26f1b7d7e66..686241547429befc0ce7ec348b5a5ecdccb39d93 100644 (file)
@@ -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;
index 2bcb1c4267c34fcd2a6e9965609613930b2609f7..6c1a8b8f8b8aef0e81869ad14e4a54b7f54227fe 100644 (file)
@@ -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;
index e1fcbac1c777c37e8b6bbc0bc314e35e4cda373f..c8235c6a822f6e19ce02e9cee16e56ba7eb926c1 100644 (file)
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "neg"]
 pub trait Neg {
     type Output;
index 2ba87285ef161e0addd61da41af5aa586fd65ec6..eeef5bc576bbdecc3b0730444331323f87074f94 100644 (file)
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "not"]
 pub trait Not {
     type Output;
index 50463e7476190debb39eb4fd4d5205330157d2aa..d5ffae51fab050a1868f7076b0ff83530236d407 100644 (file)
@@ -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);
index 50107bb4324e6bed98361476361fc4f235c7a752..7226b26920bc9fc84592e8211ee876717339c03d 100644 (file)
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "deref"]
 pub trait Deref {
     type Target;
index e0338b917f52397cd217ae6a1b0401a8f97e6a8d..4b589a8af4580b011d5c6194e01a9677e2e55099 100644 (file)
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "deref"]
 pub trait Deref {
     type Target;
index 608ad0fe94e135658355469610d3b3bdf37caf35..5fc042850ed37e4923b190fbf6098afc910f5ffc 100644 (file)
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "deref"]
 pub trait Deref {
     type Target;
index dc049b136dddda9ddd1b9e2b996eb6bf9da6daaa..2a847fbcb3978b6fe409fe3e10d57b4c8b5db5d7 100644 (file)
@@ -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);
index 4c9e755ba84b5c077aea28cad07cf1ef9df688d1..8e7172406c470625d52ce372353bc85af26a7d53 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 #[lang = "fn_once"]
 pub trait FnOnce<Args> {
     #[lang = "fn_once_output"]
index b52aa3df510470b5ed02c4d12f9f62607a641627..1f56187ee5d6f198a6061c759da85614d25000bc 100644 (file)
@@ -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;
index cdc39f3dccae3fa5bea65e9ed913d31da47f9e20..20f113ef97d8bc3951c805c503cc984e2f6c1eef 100644 (file)
@@ -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;
index 206082af6246fc759c7d063e9feb71939e103761..2683179c75866ab59e646a7c8b1aa2071eb86737 100644 (file)
@@ -1,4 +1,7 @@
 // { dg-additional-options "-w" }
+#[lang = "sized"]
+pub trait Sized {}
+
 struct FatPtr<T> {
     data: *const T,
     len: usize,
index c9bcf1631e21e4e648d6e8d22ac792d08760d77e..fb3b4e34a7c29386b9683d8fae6173914a1af4b2 100644 (file)
@@ -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")]
index d4f5878ef18dd5d54f990235f8629f6ff0549ed4..f8a5959edd52ec37bc2cf77c7adf7152cd726147 100644 (file)
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 struct S;
 
 impl S {
index b0bdeab9091c494b7c9e7fe28ae58a2c97c68035..a5951223e0727efb8834a004950592c1949aa6c7 100644 (file)
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo(i32);
 trait Bar {
     fn baz(&self);
index ed7b7c9d6eed14826886174a7c657e83bbab4010..093343c1be5ddb242d42b428dd176b64a38dd375 100644 (file)
@@ -1,4 +1,7 @@
 /* { dg-output "3\r*\n" } */
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "C" {
     fn printf(s: *const i8, ...);
 }
index a4ba5be116e08062f500760698f93be680baf0b7..83cf107a99cc31015de8671c483417fb756a456f 100644 (file)
@@ -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;
 }
index 49befb8fbb1467c92ad65af86d848d4994b93bec..928a37c5d73171639ab0da29980fed9e76c28dda 100644 (file)
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo(i32);
 trait Bar {
     fn baz(&self);
index 9974f70da8c2d7265dae3ec24be3dd3f703a5e76..d5fd5466fe9221257d50d1d2bc40960e73bce9bb 100644 (file)
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 trait Foo {
     const A: i32 = 123;
 }
index 6fe92ef70f962d04aeb6f12145a24e8efed75b3f..668b43760b4b7a4ac77d683bd16ae137301ec3dd 100644 (file)
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 trait A {
     fn a() -> i32 {
         123
index 3b2d000780a018a0d2f75f2f36f9cde827aac51d..61c2d15843322d14a76093d49f0017b55fc9a686 100644 (file)
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo(i32);
 trait Bar {
     fn baz(&self);
index f9c0dfdae74a3408a9ceb2a16e369c575fcf811f..7cd7d1a19efc78e1dcf2b32c43143d76ecf9f2eb 100644 (file)
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 struct Foo(i32);
 trait Bar {
     fn baz(&self);
index 74363c2ddacd7e7ccb245ba608ebe0700895324a..de5ddc1ea9e8aac678c4dcea150ec3d26a0045cc 100644 (file)
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Foo {
     type A;
 
index fc1bbe87170dc8bb4fa3a011f0137ee65e50840f..21f1575218bdcb391310f89b9ed2f3b99edfc9ed 100644 (file)
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Foo {
     type A;
 
index c26737f58e6eddfe9940933794db9c4e8071b339..69e784ef3b44cbca6a646d53700303674afc804d 100644 (file)
@@ -3,6 +3,9 @@ extern "C" {
     fn printf(s: *const i8, ...);
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 pub trait Foo {
     type A;
 
index 738d193529191500eb52adcfc2a1b7ffdbcbb9f5..a1642f6018f5cc96462fc3fe8bb5ab0794b3c2c9 100644 (file)
@@ -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;
 }
index 40dcfdee0b3d433878571b00dbac36a401c70a59..d89affd5b820a5fb86d1ce472d9e50e73afd8f10 100644 (file)
@@ -5,6 +5,9 @@ extern "rust-intrinsic" {
     fn transmute<T, U>(value: T) -> U;
 }
 
+#[lang = "sized"]
+pub trait Sized {}
+
 struct WrapI {
     inner: i32,
 }
index ab4afd7ddde84395d16ea3bde5237c782abd3ec8..e0c100cd20ccc7c8df1d4cff2c31480bf2ec56b4 100644 (file)
@@ -1,5 +1,8 @@
 #![feature(intrinsics)]
 
+#[lang = "sized"]
+pub trait Sized {}
+
 extern "rust-intrinsic" {
     pub fn wrapping_add<T>(l: T, r: T) -> T;
 }
index b24ebce56f1667a66c28af72d114758db57257ac..692899281008714f9384c89d50faa457746d476c 100644 (file)
@@ -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;
index 58b8eb13db66ae52a4178327eef0c34b80513246..179c822c7fc25743c77e75245337c2fc9cc7531e 100644 (file)
@@ -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;
 
index 8fb0788e388eea037b55c29e33210982a1559d0c..46d0e825b9da83b6481b77d1c5226b8192fbbd09 100644 (file)
@@ -1,3 +1,6 @@
+#[lang = "sized"]
+pub trait Sized {}
+
 pub fn generic_function<X>(a: X) -> X {
     a
 }