]> git.ipfire.org Git - people/ms/gcc.git/log
people/ms/gcc.git
2 years agoast: Add proper visitors for ExternalTypeItem
Arthur Cohen [Thu, 23 Feb 2023 15:59:20 +0000 (16:59 +0100)] 
ast: Add proper visitors for ExternalTypeItem

gcc/rust/ChangeLog:

* ast/rust-item.h: Add non-const `get_visibility` to ExternalTypeItem.
* ast/rust-ast-dump.cc (Dump::visit): Add implementation for ExternalTypeItem.
* expand/rust-attribute-visitor.cc (AttrVisitor::visit): Likewise.

2 years agoast: Add ExternalTypeItem node
Arthur Cohen [Thu, 23 Feb 2023 15:50:39 +0000 (16:50 +0100)] 
ast: Add ExternalTypeItem node

gcc/rust/ChangeLog:

* ast/rust-item.h (class ExternalTypeItem): New class.
* ast/rust-ast.cc (ExternalTypeItem::as_string): New function.
(ExternalTypeItem::accept_vis): Likewise.
* ast/rust-ast-full-decls.h (class ExternalTypeItem): Declare class.
* ast/rust-ast-dump.cc (Dump::visit): Add base visitor for ExternalTypeItem.
* ast/rust-ast-dump.h: Likewise.
* ast/rust-ast-visitor.h: Likewise.
* checks/errors/rust-feature-gate.h: Likewise.
* expand/rust-attribute-visitor.cc (AttrVisitor::visit): Likewise.
* expand/rust-attribute-visitor.h: Likewise.
* hir/rust-ast-lower-base.cc (ASTLoweringBase::visit): Likewise.
* hir/rust-ast-lower-base.h: Likewise.
* resolve/rust-ast-resolve-base.cc (ResolverBase::visit): Likewise.
* resolve/rust-ast-resolve-base.h: Likewise.
* resolve/rust-early-name-resolver.cc (EarlyNameResolver::visit): Likewise.
* resolve/rust-early-name-resolver.h: Likewise.
* util/rust-attributes.cc (AttributeChecker::visit): Likewise.
* util/rust-attributes.h: Likewise.

2 years agomacro_invoc_lexer: Add `split_current_token` implementation
Arthur Cohen [Tue, 21 Feb 2023 12:51:54 +0000 (13:51 +0100)] 
macro_invoc_lexer: Add `split_current_token` implementation

gcc/rust/ChangeLog:

* expand/rust-macro-invoc-lexer.cc (MacroInvocLexer::split_current_token):
Add proper implementation.

gcc/testsuite/ChangeLog:

* rust/compile/expand_macro_qual_path_in_type.rs: New test.

2 years agoMerge remote-tracking branch 'upstream/tschwinge/merge-upstream'
Arthur Cohen [Thu, 23 Feb 2023 15:02:43 +0000 (16:02 +0100)] 
Merge remote-tracking branch 'upstream/tschwinge/merge-upstream'

2 years agoparser: Add parsing of auto traits
Arthur Cohen [Wed, 15 Feb 2023 15:53:41 +0000 (16:53 +0100)] 
parser: Add parsing of auto traits

This adds enough handling to start parsing `auto` traits but not handle
them in the AST, lowering phase or HIR yet.

The feature is named `optin_builtin_traits` in Rust 1.49 but changes to
`auto_traits` later down the line. So we'll need to take care of this later
on.

Finally, this also changes the way the lexer detects if a string is a
keyword or not. We relied on a call to `std::lower_bound` to figure
out if a string was contained in an array or not, and this ended up
causing issues when adding new keywords. We can instead switch to a
simple hashmap and search for the key. The code *might* be less
optimized (unsure) but it is definitely simpler and easier to read.

Fixes #1814

gcc/rust/ChangeLog:

* ast/rust-item.h (class Trait): Add `has_auto` field.
* checks/errors/rust-feature.cc: Add handling for `feature(optin_builtin_traits)`
* checks/errors/rust-feature.h: Likewise.
* lex/rust-lex.cc: Fix keyword classification using hashmap.
* lex/rust-token.h: Add `auto` keyword token.
* parse/rust-parse-impl.h (Parser::parse_vis_item): Parse auto traits
on `auto` keyword.

gcc/testsuite/ChangeLog:

* rust/compile/auto_trait_invalid.rs: New test.
* rust/compile/auto_trait_valid.rs: New test.

2 years agotypecheck: Refactor coercion_site
Pierre-Emmanuel Patry [Wed, 22 Feb 2023 09:44:16 +0000 (10:44 +0100)] 
typecheck: Refactor coercion_site

Refactor coercion_site to be a simple function in rust-type-util.h
instead of a static function in TypeCheckBase.
gcc/rust/ChangeLog:

* typecheck/rust-hir-trait-resolve.cc (TraitItemReference::resolve_item):
Remove TypeCheckBase namespace qualifier.
* typecheck/rust-hir-type-check-base.cc (TypeCheckBase::coercion_site):
Remove coercion_site function.
* typecheck/rust-hir-type-check-base.h: Remove coercion_site
prototype.
* typecheck/rust-type-util.cc (coercion_site): Add coercion_site
function.
* typecheck/rust-type-util.h (coercion_site): Add coercion_site
prototype.
* typecheck/rust-tyty-call.cc (TypeCheckCallExpr::visit):
Remove TypeCheckBase namespace qualifier.
(TypeCheckMethodCallExpr::check): Remove TypeCheckBase namespace
qualifier.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
2 years agoMerge upstream (dummy), 2023-02-21 "Rust front-end update"
Thomas Schwinge [Wed, 22 Feb 2023 07:43:44 +0000 (08:43 +0100)] 
Merge upstream (dummy), 2023-02-21 "Rust front-end update"

In #1908 'Merge upstream, last commit before 2023-02-21 "Rust front-end update"'
we merged commit ecc863e85efe259c799515de0c38c2297b0e3bd7 from upstream GCC
master branch.

This one now merges the 2023-02-21 "Rust front-end update", commits
ecc863e85efe259c799515de0c38c2297b0e3bd7..ecb409b23b86363fa085ec32e89e1aeda002cb70:

      - 7e7a95880443 gccrs: Fix missing dead code analysis ICE on local enum definition
      - 708085446189 gccrs: visibility: Rename get_public_vis_type -> get_vis_type
      - 1e8eb1022009 gccrs: dump: Emit visibility when dumping items
      - 543ba35905b9 gccrs: Add catch for recusive type queries
      - d072b4a5164e gccrs: testing: try loop in const function
      - 980bd25e2560 gccrs: ast: dump assignment and compound assignment expr
      - aeed747093c2 gccrs: ast: dump If expressions
      - 00e0684a78a3 gccrs: builtins: Move implementation into source file
      - 79434fabf762 gccrs: Track DefId on ADT variants
      - 31b77593edbf gccrs: Ensure uniqueness on Path probe's
      - a5d3586a9b15 gccrs: Support looking up super traits for trait items
      - 8d02ef57a691 gccrs: ast: dump: add emit_generic_params helper
      - 4c807ef70db1 gccrs: ast: dump: add format_{tuple,struct}_field helpers
      - 0a762d204980 gccrs: ast: dump structs, enums and unions
      - ab6d8ad3f595 gccrs: intrinsics: Add data prefetching intrinsics
      - 570415e75c42 gccrs: fix ICE on missing closing paren
      - a08f265625e5 gccrs: mappings: Add MacroInvocation -> MacroRulesDef mappings
      - 295cd2650888 gccrs: rust-ast-resolve-item: Add note about resolving glob uses
      - 2f1035fc91ce gccrs: ast: Add accept_vis() method to `GenericArg`
      - 522197469179 gccrs: early-name-resolver: Add simple macro name resolution
      - 13556413e384 gccrs: Support type resolution on super traits on dyn objects
      - f49e25282413 gccrs: Add mappings for fn_once lang item
      - 2d7661e76e12 gccrs: Add ABI mappings for rust-call to map to ABI::RUST
      - 59bee4d4663e gccrs: Method resolution must support multiple candidates
      - b1510ce0fc77 gccrs: ast: dump: fix extra newline in block without tail
      - 0a9114c151b8 gccrs: ast: dump: minor fixups to IfExpr formatting
      - c091fd5f4a2d gccrs: ast: dump: ComparisonExpr and LazyBooleanExpr
      - f26e9ca3e9aa gccrs: ast: dump: ArrayExpr
      - d1db46191ea5 gccrs: ast: dump: various simple Exprs
      - 173f98ae49d8 gccrs: ast: dump: RangeExprs
      - 74065c000e33 gccrs: Refactor TraitResolver to not require a visitor
      - acbaadfa46d0 gccrs: ast: dump TypeAlias
      - 8f0b1526e04c gccrs: Support outer attribute handling on trait items just like normal items
      - 421494b5929f gccrs: dump: Emit visibility when dumping items
      - 31150a6366db gccrs: dump: Dump items within modules
      - 2f16df1b4433 gccrs: dump: Fix module dumping
      - e535b7b3e385 gccrs: ast: Module: unloaded module and inner attributes
      - ec28fdb6aad3 gccrs: dump: Dump macro rules definition
      - 643ec1c253d9 gccrs: Add check for recursive trait cycles
      - e2647e5e5ad1 gccrs: ast: Refactor ASTFragment -> Fragment class
      - 68e743090df6 gccrs: rust: Replace uses of ASTFragment -> Fragment
      - b326cced19e5 gccrs: ast: Improve Fragment API
      - ed75e142a708 gccrs: Add missing fn_once_output langitem
      - 870dd9d5d3c5 gccrs: Refactor expression hir lowering into cc file
      - 9e19f329e523 gccrs: Formatting cleanup in HIR lowering pattern
      - 977e0e5227d4 gccrs: Add name resolution for closures
      - 4d021d9e019d gccrs: Refactor method call type checking
      - 898240946ca2 gccrs: Add closures to lints and error checking
      - 740a1997228d gccrs: Initial Type resolution for closures
      - 699e7e862763 gccrs: Closure support at CallExpr
      - 12e94515f894 gccrs: Add missing name resolution to Function type-path segments
      - 875f722de5ea gccrs: Add missing hir lowering to function type-path segments
      - 51d180fcd7e6 gccrs: Add missing type resolution for function type segments
      - 21d19d2cf606 gccrs: Support Closure calls as generic trait bounds
      - a8531cd9a82a gccrs: Implement the inline visitor
      - 6ef1089ec27e gccrs: rust: Allow gccrs to build on x86_64-apple-darwin with clang/libc++
      - 4d39d3912ffe gccrs: builtins: Rename all bang macro handlers
      - 782e070374ac gccrs: intrinsics: Add `sorry_handler` intrinsic handler
      - 514284ecd97f gccrs: constexpr: Add `rust_sorry_at` in places relying on init values
      - a7c8f7ee3433 gccrs: intrinsics: Add early implementation for atomic_store_{seqcst, relaxed, release}
      - 1c586a1d1c12 gccrs: intrinsics: Add unchecked operation intrinsics
      - cb2cf21cf336 gccrs: intrinsics: Use lambdas for wrapping_<op> intrinsics
      - f4c818c623c0 gccrs: intrinsics: Cleanup error handling around atomic_store_*
      - 5b5a0ca77179 gccrs: intrinsics: Implement atomic_load intrinsics
      - aedd97a537cb gccrs: ast: visitor pattern -> overload syntax compatibility layer
      - 3b5fb3f89b0f gccrs: ast: transform helper methods to visits and add methods to simplify repeated patterns
      - a56faba96369 gccrs: ast: refer correctly to arguments in docs-strings
      - 04a16c58e343 gccrs: ast: Dump unit struct
      - 2fc013036041 gccrs: add lang item "phantom_data"
      - b84222899cac gccrs: add Location to AST::Visibility
      - 85f69a9b6abd gccrs: typecheck: Fix overzealous `delete` call
      - 907d11194ed9 gccrs: ast: add visit overload for references
      - bd2240d30f80 gccrs: ast: Dump where clause and recursively needed nodes
      - 59fb0747cc2c gccrs: ast: Dump slice type
      - 140a2aed7e1c gccrs: ast: Dump array type
      - 971d16cbfade gccrs: ast: Dump raw pointer type
      - c4c859bff8d0 gccrs: ast: Dump never type
      - 91409d27d5c5 gccrs: ast: Dump tuple type
      - ee0166fa1b88 gccrs: ast: Dump inferred type
      - ae1f6b3a96dd gccrs: ast: Dump bare function type
      - ca06115eac10 gccrs: ast: Dump impl trait type one bound
      - 638f65b20832 gccrs: ast: Dump impl trait type
      - 7ed4a0ebc1d1 gccrs: ast: Dump trait object type
      - e311e9b7c591 gccrs: ast: Dump parenthesised type
      - 0bb33cb5741e gccrs: ast: Dump trait object type one bound
      - 1acb7e02ed82 gccrs: ast: Dump type param type
      - b8863414eda2 gccrs: ast: Dump generic parameters
      - ce13edd879da gccrs: ast: Remove unused include in rust-ast-dump.cc
      - 0e44abb1b509 gccrs: ast: Dump remove /* stmp */ comment to not clutter the dump
      - 567494f7030b gccrs: ast: Dump no comma after self in fn params if it is the last one
      - 78c70a50f744 gccrs: Remove default location. Add visibility location to create_* functions
      - 0ef795c3278e gccrs: Improve lexer dump
      - 01af669357c4 gccrs: Get rid of make builtin macro
      - 32a4659c5e40 gccrs: Refactor name resolver to take a Rib::ItemType
      - f7c258b29118 gccrs: Add closure binding's tracking to name resolution
      - eb1202224f8e gccrs: Add capture tracking to the type info for closures
      - 92389b46a96c gccrs: Add initial support for argument capture of closures
      - e7a69d4533ad gccrs: Fix undefined behaviour issues on macos
      - 03df9a040c97 gccrs: Skip this debug test case which is failing on the latest mac-os devtools and its only for debug info
      - 9f455ed820cc gccrs: Cleanup unused parameters to fix the bootstrap build
      - b9203d82ad27 gccrs: Repair 'gcc/rust/lang.opt' comment
      - 064bbd0fe104 gccrs: const evaluator: Remove get_nth_callarg
      - ecb409b23b86 gccrs: add math intrinsics

..., and:

      - e28c5b33b987 Update copyright years.

This merge is done with 'git merge --strategy=ours', so effectively doesn't
merge any changes.  Rationale: those commits are taken from GCC/Rust master
branch, and any remaining changes we'd either like to persist, or assess
individually, later.

2 years agotypecheck: Refactor unify_site
Pierre-Emmanuel Patry [Tue, 21 Feb 2023 16:29:53 +0000 (17:29 +0100)] 
typecheck: Refactor unify_site

Refactor unify_site to be a simple function in rust-type-util.h.

gcc/rust/ChangeLog:

* typecheck/rust-autoderef.cc: Remove TypeCheckBase qualifier.
* typecheck/rust-hir-trait-resolve.cc: Remove TypeCheckBase
qualifier.
* typecheck/rust-hir-type-check-base.cc (TypeCheckBase::unify_site):
Remove unify_site.
* typecheck/rust-hir-type-check-base.h: Remove unify_site
header.
* typecheck/rust-hir-type-check.cc (TypeResolution::Resolve):
Remove TypeCheckBase qualifier.
* typecheck/rust-type-util.cc (unify_site): Add unify_site
function.
* typecheck/rust-type-util.h (unify_site): Add unify_site
prototype.
* typecheck/rust-tyty-call.cc (TypeCheckMethodCallExpr::check):
Remove TypeCheckBase qualifier.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
2 years agoci: Run GCC 4.8 job in Ubuntu 18.04 container
Arthur Cohen [Tue, 21 Feb 2023 13:08:10 +0000 (14:08 +0100)] 
ci: Run GCC 4.8 job in Ubuntu 18.04 container

We should probably think about building GCC 4.8 from source from time
to time and hosting the image on our Dockerhub, but I think this is okay
as well for now.

ChangeLog:

* .github/workflows/ccpp.yml: Run GCC 4.8 action in ubuntu 18.04 container

2 years agoAdjust '.github/bors_log_expected_warnings'
Thomas Schwinge [Tue, 21 Feb 2023 21:37:04 +0000 (22:37 +0100)] 
Adjust '.github/bors_log_expected_warnings'

2 years agoMerge commit 'ecc863e85efe259c799515de0c38c2297b0e3bd7' into HEAD
Thomas Schwinge [Tue, 21 Feb 2023 20:13:49 +0000 (21:13 +0100)] 
Merge commit 'ecc863e85efe259c799515de0c38c2297b0e3bd7' into HEAD

2 years agoMerge commit '7b8916a6fd098546e4e53e53b37a5153664ba17f' into HEAD [#1819, #1864,...
Thomas Schwinge [Tue, 21 Feb 2023 19:48:38 +0000 (20:48 +0100)] 
Merge commit '7b8916a6fd098546e4e53e53b37a5153664ba17f' into HEAD [#1819, #1864, #1885]

2 years agoMerge commit 'ae113080a9f98e807db239f3ad2157c64324542f' into HEAD
Thomas Schwinge [Tue, 21 Feb 2023 19:47:19 +0000 (20:47 +0100)] 
Merge commit 'ae113080a9f98e807db239f3ad2157c64324542f' into HEAD

2 years agoUpdate copyright years.
Thomas Schwinge [Tue, 21 Feb 2023 12:49:42 +0000 (13:49 +0100)] 
Update copyright years.

... which accidentally had gotten reverted in recent
commit r13-6156-g1e8eb102200902e12c1b00e867e338be0a92c292
"gccrs: dump: Emit visibility when dumping items".

2 years agogccrs: add math intrinsics
Raiki Tamura [Thu, 15 Dec 2022 17:27:59 +0000 (02:27 +0900)] 
gccrs: add math intrinsics

gcc/rust/ChangeLog:

* backend/rust-builtins.cc (BuiltinsContext::setup_math_fns): New functions.

gcc/testsuite/ChangeLog:

* rust/compile/torture/intrinsics-math.rs: New test.

2 years agogccrs: const evaluator: Remove get_nth_callarg
Arthur Cohen [Thu, 17 Nov 2022 15:50:58 +0000 (16:50 +0100)] 
gccrs: const evaluator: Remove get_nth_callarg

We only used one path of the C++ folder's get_nth_callarg function:
CALL_EXPR_ARG. Replace all calls to get_nth_callarg by macro calls to
CALL_EXPR_ARG

gcc/rust/ChangeLog:

* backend/rust-constexpr.cc (get_nth_callarg): Remove function.
(rs_bind_parameters_in_call): Use CALL_EXPR_ARG instead.
(potential_constant_expression_1): Likewise.

2 years agogccrs: Repair 'gcc/rust/lang.opt' comment
Thomas Schwinge [Wed, 7 Dec 2022 08:18:26 +0000 (09:18 +0100)] 
gccrs: Repair 'gcc/rust/lang.opt' comment

... lost in #1527 commit 138a6260124740208b8f3aff2e38617f43b05fe8
"rust: Add -frust-compile-until option".

gcc/rust/ChangeLog:

* lang.opt: Fix ordering of file.

2 years agogccrs: Cleanup unused parameters to fix the bootstrap build
Philip Herron [Mon, 5 Dec 2022 02:20:55 +0000 (02:20 +0000)] 
gccrs: Cleanup unused parameters to fix the bootstrap build

gcc/rust/ChangeLog:

* backend/rust-compile-type.cc (TyTyResolveCompile::visit): Remove unused parameters.
* backend/rust-constexpr.cc (constant_value_1): Likewise.
(fold_non_dependent_init): Likewise.
* backend/rust-tree.cc (publicly_uniquely_derived_p): Likewise.
(instantiation_dependent_expression_p): Likewise.
(type_has_nontrivial_copy_init): Likewise.
(is_normal_capture_proxy): Likewise.
(resolve_nondeduced_context): Likewise.
(undeduced_auto_decl): Likewise.
(require_deduced_type): Likewise.
* checks/errors/privacy/rust-privacy-reporter.cc (PrivacyReporter::visit): Likewise.
* checks/errors/privacy/rust-reachability.cc (ReachabilityVisitor::visit): Likewise.
* checks/errors/privacy/rust-visibility-resolver.cc (VisibilityResolver::visit): Likewise.
* checks/errors/rust-const-checker.cc (ConstChecker::visit): Likewise.
* checks/errors/rust-unsafe-checker.cc (UnsafeChecker::visit): Likewise.
* checks/lints/rust-lint-marklive.cc (MarkLive::go): Likewise.
* checks/lints/rust-lint-unused-var.cc (unused_var_walk_fn): Likewise.
* expand/rust-macro-builtins.cc (try_expand_single_string_literal): Likewise.
(try_expand_many_expr): Likewise.
(parse_single_string_literal): Likewise.
(MacroBuiltin::assert_handler): Likewise.
(MacroBuiltin::file_handler): Likewise.
(MacroBuiltin::column_handler): Likewise.
(MacroBuiltin::concat_handler): Likewise.
(MacroBuiltin::env_handler): Likewise.
(MacroBuiltin::line_handler): Likewise.
* hir/rust-ast-lower-base.cc (ASTLoweringBase::visit): Likewise.
(ASTLoweringBase::handle_doc_item_attribute): Likewise.
* hir/rust-hir-dump.cc (Dump::visit): Likewise.
* hir/tree/rust-hir-full-test.cc (ConstGenericParam::accept_vis): Likewise.
* lex/rust-lex.cc (Lexer::parse_utf8_escape): Likewise.
(Lexer::parse_string): Likewise.
(Lexer::parse_char_or_lifetime): Likewise.
* lex/rust-lex.h: Likewise.
* metadata/rust-export-metadata.cc: Likewise.
* resolve/rust-ast-resolve-expr.cc (ResolveExpr::visit): Likewise.
* resolve/rust-ast-resolve-type.cc (ResolveType::visit): Likewise.
(ResolveTypeToCanonicalPath::visit): Likewise.
* resolve/rust-ast-verify-assignee.h: Likewise.
* resolve/rust-early-name-resolver.cc (EarlyNameResolver::visit): Likewise.
* typecheck/rust-hir-type-check-expr.h: Likewise.
* typecheck/rust-hir-type-check-item.h: Likewise.
* typecheck/rust-hir-type-check-pattern.cc (TypeCheckPattern::visit): Likewise.
* typecheck/rust-tyty-rules.h: Likewise.
* util/rust-attributes.cc (AttributeChecker::visit): Likewise.

2 years agogccrs: Skip this debug test case which is failing on the latest mac-os devtools and...
Philip Herron [Mon, 5 Dec 2022 00:31:18 +0000 (00:31 +0000)] 
gccrs: Skip this debug test case which is failing on the latest mac-os devtools and its only for debug info

gcc/testsuite/ChangeLog:

* rust/debug/chartype.rs: Skip testcases on Darwin architectures.

2 years agogccrs: Fix undefined behaviour issues on macos
Philip Herron [Mon, 7 Nov 2022 13:43:04 +0000 (13:43 +0000)] 
gccrs: Fix undefined behaviour issues on macos

This adds missing copy constructors to HIR::PathExprSegment which were
wrongly defaulting to empty vectors when apply specified generic arguments
to method calls.

gcc/rust/ChangeLog:

* hir/tree/rust-hir-expr.h: Add const `get_method_name`.
* hir/tree/rust-hir-full-decls.h (struct GenericArgs): Move from `struct`...
(class GenericArgs): ...to `class`.
* hir/tree/rust-hir-path.h (struct GenericArgs): Likewise.
(class GenericArgs): Clear `type_args` in copy constructor.
* typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit): Reorder
debug print.
* typecheck/rust-tyty.h: Add default constructors for `SubstitutionArgumentMappings`.

2 years agogccrs: Add initial support for argument capture of closures
Philip Herron [Fri, 21 Oct 2022 14:43:54 +0000 (15:43 +0100)] 
gccrs: Add initial support for argument capture of closures

When we have a closure expression that captures a parent function's
variable we must setup the closure data to contain this. Ignoring
moveability and mutability requires for now, this patch creates the closure
structure with fields for each of the captured variables. When it comes to
compilation of the closure expression in order to support nested closures
we must setup a context of implicit mappings so that for all path
resolution we hit this implicit closure mappings lookups code before any
lookup_var_decl as this decl will not exist so the order here is important
during path resolution which is a similar problem to match expression
destructuring.

Fixes #195

gcc/rust/ChangeLog:

* backend/rust-compile-context.cc (Context::push_closure_context): New function.
(Context::pop_closure_context): Likewise.
(Context::insert_closure_binding): Likewise.
(Context::lookup_closure_binding): Likewise.
* backend/rust-compile-context.h: Declare new functions and closure mappings.
* backend/rust-compile-expr.cc (CompileExpr::visit): Visit captures properly.
(CompileExpr::generate_closure_function): Compile captures properly.
* backend/rust-compile-resolve-path.cc (ResolvePathRef::resolve): Check for
closure bindings.
* backend/rust-compile-type.cc (TyTyResolveCompile::visit): Compile capture list's
types as well.

gcc/testsuite/ChangeLog:

* rust/execute/torture/closure3.rs: New test.

2 years agogccrs: Add capture tracking to the type info for closures
Philip Herron [Fri, 21 Oct 2022 14:39:52 +0000 (15:39 +0100)] 
gccrs: Add capture tracking to the type info for closures

gcc/rust/ChangeLog:

* typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit): Pass captures
properly to `TyTy::ClosureType` constructor.
* typecheck/rust-tyty.cc (ClosureType::as_string): Fix string representation.
(ClosureType::clone): Pass `captures` argument.
* typecheck/rust-tyty.h: Add `captures` field.

2 years agogccrs: Add closure binding's tracking to name resolution
Philip Herron [Fri, 21 Oct 2022 12:40:40 +0000 (13:40 +0100)] 
gccrs: Add closure binding's tracking to name resolution

When we have a closure block referencing variables in a parent function,
we must track what these are. We do this by having a context of closures
so if we have a variable reference and its declared in a rib whose node id
is less than the node id of the closure's node id we know it must be a
captured variable. We also need to iterate all possible closure contexts
as we might be in the case of a nested closure.

Addresses #195

gcc/rust/ChangeLog:

* resolve/rust-ast-resolve-expr.cc (ResolveExpr::visit): Use proper closure
contexts.
* resolve/rust-name-resolver.cc (Scope::lookup_decl_type): New function.
(Scope::lookup_rib_for_decl): Likewise.
(Resolver::insert_resolved_name): Insert captured items.
(Resolver::push_closure_context): New function.
(Resolver::pop_closure_context): Likewise.
(Resolver::insert_captured_item): Likewise.
(Resolver::decl_needs_capture): Likewise.
(Resolver::get_captures): Likewise.
* resolve/rust-name-resolver.h: Declare new functions.

2 years agogccrs: Refactor name resolver to take a Rib::ItemType
Philip Herron [Fri, 21 Oct 2022 11:54:52 +0000 (12:54 +0100)] 
gccrs: Refactor name resolver to take a Rib::ItemType

This allows us to track the type of declaration that is stored within a
Rib.

gcc/rust/ChangeLog:

* resolve/rust-ast-resolve-expr.cc (ResolveExpr::visit): Add Rib argument.
(ResolveExpr::resolve_closure_param): Likewise.
* resolve/rust-ast-resolve-implitem.h: Likewise.
* resolve/rust-ast-resolve-item.cc (ResolveTraitItems::visit): Likewise.
(ResolveItem::visit): Likewise.
* resolve/rust-ast-resolve-pattern.cc (PatternDeclaration::visit): Likewise.
* resolve/rust-ast-resolve-pattern.h: Likewise.
* resolve/rust-ast-resolve-stmt.h: Likewise.
* resolve/rust-ast-resolve-toplevel.h: Likewise.
* resolve/rust-ast-resolve-type.h: Likewise.
* resolve/rust-name-resolver.cc (Rib::lookup_decl_type): Likewise.
(Scope::insert): Likewise.
(Resolver::insert_builtin_types): Likewise.
* resolve/rust-name-resolver.h: Likewise.

2 years agogccrs: Get rid of make builtin macro
Philip Herron [Fri, 21 Oct 2022 12:01:43 +0000 (13:01 +0100)] 
gccrs: Get rid of make builtin macro

This macro is a mess and a helper method is much better for this case.

gcc/rust/ChangeLog:

* resolve/rust-name-resolver.cc (MKBUILTIN_TYPE): Remove macro.
(Rib::Rib): Remove `mappings` field.
(Resolver::generate_builtins): Use `setup_builtin` instead of macro.
(Resolver::setup_builtin): New function.
* resolve/rust-name-resolver.h: Declare `setup_builtin`, add FIXME
comment.

2 years agogccrs: Improve lexer dump
Raiki Tamura [Wed, 16 Nov 2022 08:15:24 +0000 (17:15 +0900)] 
gccrs: Improve lexer dump

gcc/rust/ChangeLog:

* lex/rust-lex.cc (Lexer::Lexer): Add `dump_lex` boolean flag.
(Lexer::skip_token): Dump tokens if flag is enabled.
(Lexer::dump_and_skip): New function.
* lex/rust-lex.h: Include optional.h and declare functions.
* parse/rust-parse-impl.h (Parser::debug_dump_lex_output): Remove old
unused function.
* parse/rust-parse.h: Likewise.
* rust-session-manager.cc (Session::compile_crate): Pass lexer dump
option to lexer.
(Session::dump_lex): New function.
* util/rust-optional.h: Add missing constructor.

Signed-off-by: Raiki Tamura <tamaron1203@gmail.com>
2 years agogccrs: Remove default location. Add visibility location to create_* functions
Dave [Wed, 16 Nov 2022 23:06:44 +0000 (17:06 -0600)] 
gccrs: Remove default location. Add visibility location to create_* functions

gcc/rust/ChangeLog:

* ast/rust-item.h: Remoe default location for Visibility class.
* parse/rust-parse-impl.h (Parser::parse_visibility): Pass proper location
when instantiating visibilities.

2 years agogccrs: ast: Dump no comma after self in fn params if it is the last one
Jakub Dupak [Wed, 16 Nov 2022 13:16:51 +0000 (14:16 +0100)] 
gccrs: ast: Dump no comma after self in fn params if it is the last one

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Fix dumping of fn params.

Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2 years agogccrs: ast: Dump remove /* stmp */ comment to not clutter the dump
Jakub Dupak [Wed, 16 Nov 2022 13:03:07 +0000 (14:03 +0100)] 
gccrs: ast: Dump remove /* stmp */ comment to not clutter the dump

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Remove extraneous string when
dumping statements.

Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2 years agogccrs: ast: Remove unused include in rust-ast-dump.cc
Jakub Dupak [Wed, 16 Nov 2022 12:59:16 +0000 (13:59 +0100)] 
gccrs: ast: Remove unused include in rust-ast-dump.cc

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc: Remove unused include.

Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2 years agogccrs: ast: Dump generic parameters
Jakub Dupak [Wed, 16 Nov 2022 12:58:50 +0000 (13:58 +0100)] 
gccrs: ast: Dump generic parameters

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Add missing visitor.
* ast/rust-ast-dump.h: Likewise.

Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2 years agogccrs: ast: Dump type param type
Jakub Dupak [Tue, 15 Nov 2022 17:39:41 +0000 (18:39 +0100)] 
gccrs: ast: Dump type param type

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Add missing visitor.

Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2 years agogccrs: ast: Dump trait object type one bound
Jakub Dupak [Tue, 15 Nov 2022 16:02:00 +0000 (17:02 +0100)] 
gccrs: ast: Dump trait object type one bound

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Add missing visitor.

Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2 years agogccrs: ast: Dump parenthesised type
Jakub Dupak [Tue, 15 Nov 2022 14:52:34 +0000 (15:52 +0100)] 
gccrs: ast: Dump parenthesised type

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Add missing visitor.

Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2 years agogccrs: ast: Dump trait object type
Jakub Dupak [Tue, 15 Nov 2022 14:49:05 +0000 (15:49 +0100)] 
gccrs: ast: Dump trait object type

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Add missing visitor.

Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2 years agogccrs: ast: Dump impl trait type
Jakub Dupak [Tue, 15 Nov 2022 14:44:48 +0000 (15:44 +0100)] 
gccrs: ast: Dump impl trait type

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Add missing visitor.

Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2 years agogccrs: ast: Dump impl trait type one bound
Jakub Dupak [Tue, 15 Nov 2022 14:42:08 +0000 (15:42 +0100)] 
gccrs: ast: Dump impl trait type one bound

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Add missing visitor.

Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2 years agogccrs: ast: Dump bare function type
Jakub Dupak [Mon, 7 Nov 2022 16:09:33 +0000 (17:09 +0100)] 
gccrs: ast: Dump bare function type

+ Return FunctionQualifiers as ref to work in ast dump

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Add missing visitor.
* ast/rust-ast-dump.h: Add missing getter declaration.
* ast/rust-ast-full-test.cc (BareFunctionType::as_string): Fix bare function
string representation.
* ast/rust-type.h (class BareFunctionType): Declare said getter.

Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2 years agogccrs: ast: Dump inferred type
Jakub Dupak [Sun, 6 Nov 2022 20:29:56 +0000 (21:29 +0100)] 
gccrs: ast: Dump inferred type

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Add missing visitor.

Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2 years agogccrs: ast: Dump tuple type
Jakub Dupak [Sun, 6 Nov 2022 20:27:49 +0000 (21:27 +0100)] 
gccrs: ast: Dump tuple type

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Add missing tuple type visitor.

Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2 years agogccrs: ast: Dump never type
Jakub Dupak [Sun, 6 Nov 2022 20:23:12 +0000 (21:23 +0100)] 
gccrs: ast: Dump never type

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Add missing never type visitor.

Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2 years agogccrs: ast: Dump raw pointer type
Jakub Dupak [Sun, 6 Nov 2022 20:21:34 +0000 (21:21 +0100)] 
gccrs: ast: Dump raw pointer type

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Add missing RawPointer visitor.

Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2 years agogccrs: ast: Dump array type
Jakub Dupak [Sun, 6 Nov 2022 19:54:40 +0000 (20:54 +0100)] 
gccrs: ast: Dump array type

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Add missing array visitor

Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2 years agogccrs: ast: Dump slice type
Jakub Dupak [Sun, 6 Nov 2022 19:49:17 +0000 (20:49 +0100)] 
gccrs: ast: Dump slice type

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Add missing slice visitor.

Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2 years agogccrs: ast: Dump where clause and recursively needed nodes
Jakub Dupak [Fri, 4 Nov 2022 22:48:12 +0000 (23:48 +0100)] 
gccrs: ast: Dump where clause and recursively needed nodes

This is currently needed for lifetimes to use the existing infrastructure.

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Add missing visitors.
* ast/rust-ast-dump.h: Likewise.
* ast/rust-ast.h: Add `get_lifetime_bounds` method.
* ast/rust-item.h: Add missing getter for lifetimes.
* ast/rust-type.h: Likewise.

Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2 years agogccrs: ast: add visit overload for references
Jakub Dupak [Fri, 4 Nov 2022 22:30:24 +0000 (23:30 +0100)] 
gccrs: ast: add visit overload for references

This is currently needed for lifetimes to use the existing infrastructure.

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Add new reference visitor wrapper.
* ast/rust-ast-dump.h: Declare it.
* ast/rust-item.h: Add mutable visibility getters.

Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2 years agogccrs: typecheck: Fix overzealous `delete` call
Arthur Cohen [Wed, 2 Nov 2022 08:52:01 +0000 (09:52 +0100)] 
gccrs: typecheck: Fix overzealous `delete` call

gcc/rust/ChangeLog:

* typecheck/rust-tyty-call.cc (TypeCheckCallExpr::visit): Fix extra call
to `delete`.

2 years agogccrs: add Location to AST::Visibility
Dave [Thu, 10 Nov 2022 05:17:50 +0000 (23:17 -0600)] 
gccrs: add Location to AST::Visibility

gcc/rust/ChangeLog:

* ast/rust-item.h: Add location member.
* hir/rust-ast-lower.cc (translate_visibility): Pass location argument.
* hir/tree/rust-hir-item.h: Fix constructor to accept Location argument.

2 years agogccrs: add lang item "phantom_data"
Raiki Tamura [Wed, 9 Nov 2022 09:49:12 +0000 (18:49 +0900)] 
gccrs: add lang item "phantom_data"

gcc/rust/ChangeLog:

* util/rust-lang-item.h: Add handling for `phantom_data` lang item.

gcc/testsuite/ChangeLog:

* rust/compile/torture/phantom_data.rs: New test.

2 years agogccrs: ast: Dump unit struct
Jakub Dupak [Fri, 28 Oct 2022 15:58:39 +0000 (17:58 +0200)] 
gccrs: ast: Dump unit struct

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Add handling for unit structures.

Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2 years agogccrs: ast: refer correctly to arguments in docs-strings
Jakub Dupak [Fri, 28 Oct 2022 15:27:16 +0000 (17:27 +0200)] 
gccrs: ast: refer correctly to arguments in docs-strings

gcc/rust/ChangeLog:

* ast/rust-ast-dump.h: Fix documentation.

Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2 years agogccrs: ast: transform helper methods to visits and add methods to simplify repeated...
Jakub Dupak [Thu, 27 Oct 2022 23:37:48 +0000 (01:37 +0200)] 
gccrs: ast: transform helper methods to visits and add methods to simplify repeated patterns

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::go): Use new API.
(Dump::format_function_param): Refactor.
(Dump::visit_items_joined_by_separator): New function.
(Dump::emit_attrib): Refactor.
(Dump::visit_as_line): New function.
(Dump::visit_items_as_lines): Likewise.
(Dump::visit_items_as_block): Likewise.
(Dump::visit): Use new API.
(Dump::emit_visibility): Likewise.
(Dump::emit_indented_string): Likewise.
(Dump::emit_generic_params): Likewise.
(Dump::format_tuple_field): Likewise.
(Dump::format_struct_field): Likewise.
(Dump::format_function_common): Likewise.
(Dump::visit_function_common): Likewise.
* ast/rust-ast-dump.h: Declare new functions and add documentation.

Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2 years agogccrs: ast: visitor pattern -> overload syntax compatibility layer
Jakub Dupak [Thu, 27 Oct 2022 20:27:55 +0000 (22:27 +0200)] 
gccrs: ast: visitor pattern -> overload syntax compatibility layer

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Add new visit function for overloading.
* ast/rust-ast-dump.h: Add documentation for layer.

Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2 years agogccrs: intrinsics: Implement atomic_load intrinsics
Arthur Cohen [Wed, 26 Oct 2022 15:00:55 +0000 (17:00 +0200)] 
gccrs: intrinsics: Implement atomic_load intrinsics

gcc/rust/ChangeLog:

* backend/rust-builtins.cc (BuiltinsContext::setup_atomic_fns): Declare atomic
load intrinsics.
* backend/rust-compile-intrinsic.cc (atomic_load_handler_inner): New handler.
(atomic_load_handler): Likewise.
(unchecked_op_handler): Remove `static` function qualifier.
(build_atomic_builtin_name): Handle load intrinsics.
(atomic_store_handler_inner): New handler.

gcc/testsuite/ChangeLog:

* rust/compile/torture/intrinsics-3.rs:
* rust/execute/torture/atomic_load.rs: New test.

2 years agogccrs: intrinsics: Cleanup error handling around atomic_store_*
Arthur Cohen [Wed, 26 Oct 2022 14:35:12 +0000 (16:35 +0200)] 
gccrs: intrinsics: Cleanup error handling around atomic_store_*

gcc/rust/ChangeLog:

* backend/rust-compile-intrinsic.cc (check_for_basic_integer_type): New function.
(build_atomic_builtin_name): Use HIR Type instead of `tree`.
(atomic_store_handler_inner): Cleanup error handling.
(unchecked_op_inner): Likewise.

gcc/testsuite/ChangeLog:

* rust/compile/torture/intrinsics-5.rs: Fix error message.

2 years agogccrs: intrinsics: Use lambdas for wrapping_<op> intrinsics
Arthur Cohen [Wed, 26 Oct 2022 14:06:53 +0000 (16:06 +0200)] 
gccrs: intrinsics: Use lambdas for wrapping_<op> intrinsics

gcc/rust/ChangeLog:

* backend/rust-compile-intrinsic.cc (wrapping_op_handler): Refactor to return
an `std::function`.
(wrapping_op_handler_inner): Rename.
(wrapping_add_handler): Remove function.
(wrapping_sub_handler): Likewise.
(wrapping_mul_handler): Likewise.

2 years agogccrs: intrinsics: Add unchecked operation intrinsics
Arthur Cohen [Wed, 26 Oct 2022 13:57:54 +0000 (15:57 +0200)] 
gccrs: intrinsics: Add unchecked operation intrinsics

gcc/rust/ChangeLog:

* backend/rust-compile-intrinsic.cc (is_basic_integer_type): New function.
(unchecked_op_inner): New handler.
(unchecked_op_handler): New handler.

gcc/testsuite/ChangeLog:

* rust/compile/torture/intrinsics-6.rs: New test.
* rust/compile/torture/intrinsics-7.rs: New test.

2 years agogccrs: intrinsics: Add early implementation for atomic_store_{seqcst, relaxed, release}
Arthur Cohen [Tue, 25 Oct 2022 09:24:10 +0000 (11:24 +0200)] 
gccrs: intrinsics: Add early implementation for atomic_store_{seqcst, relaxed, release}

gcc/rust/ChangeLog:

* backend/rust-builtins.cc (BuiltinsContext::setup_atomic_fns): New function.
(BuiltinsContext::setup): Call `setup_atomic_fns`.
* backend/rust-builtins.h: Declare `setup_atomic_fns`.
* backend/rust-compile-intrinsic.cc (atomic_store_handler_inner): New function.
(atomic_store_handler): New handler.
(make_unsigned_long_tree): Add helper around making unsigned long trees.
(prefetch_data_handler): Use `make_unsigned_long_tree`.
(build_atomic_builtin_name): New function.

gcc/testsuite/ChangeLog:

* rust/compile/torture/intrinsics-4.rs: New test.
* rust/compile/torture/intrinsics-5.rs: New test.
* rust/execute/torture/atomic_store.rs: New test.

2 years agogccrs: constexpr: Add `rust_sorry_at` in places relying on init values
Arthur Cohen [Mon, 24 Oct 2022 11:20:41 +0000 (13:20 +0200)] 
gccrs: constexpr: Add `rust_sorry_at` in places relying on init values

gcc/rust/ChangeLog:

* backend/rust-constexpr.cc (build_anon_member_initialization): Workaround uninitialized
values.
(build_data_member_initialization): Likewise.

2 years agogccrs: intrinsics: Add `sorry_handler` intrinsic handler
Arthur Cohen [Tue, 25 Oct 2022 08:48:43 +0000 (10:48 +0200)] 
gccrs: intrinsics: Add `sorry_handler` intrinsic handler

gcc/rust/ChangeLog:

* backend/rust-compile-intrinsic.cc (sorry_handler): New intrinsic handler.

gcc/testsuite/ChangeLog:

* rust/compile/torture/intrinsics-3.rs: New test.

2 years agogccrs: builtins: Rename all bang macro handlers
Arthur Cohen [Mon, 24 Oct 2022 15:28:11 +0000 (17:28 +0200)] 
gccrs: builtins: Rename all bang macro handlers

gcc/rust/ChangeLog:

* expand/rust-macro-builtins.cc (MacroBuiltin::assert): Rename to...
(MacroBuiltin::assert_handler): ..this.
(MacroBuiltin::file): Rename to...
(MacroBuiltin::file_handler): ..this.
(MacroBuiltin::column): Rename to...
(MacroBuiltin::column_handler): ..this.
(MacroBuiltin::include_bytes): Rename to...
(MacroBuiltin::include_bytes_handler): ..this.
(MacroBuiltin::include_str): Rename to...
(MacroBuiltin::include_str_handler): ..this.
(MacroBuiltin::compile_error): Rename to...
(MacroBuiltin::compile_error_handler): ..this.
(MacroBuiltin::concat): Rename to...
(MacroBuiltin::concat_handler): ..this.
(MacroBuiltin::env): Rename to...
(MacroBuiltin::env_handler): ..this.
(MacroBuiltin::cfg): Rename to...
(MacroBuiltin::cfg_handler): ..this.
(MacroBuiltin::include): Rename to...
(MacroBuiltin::include_handler): ..this.
(MacroBuiltin::line): Rename to...
(MacroBuiltin::line_handler): ..this.
* expand/rust-macro-builtins.h: Rename all handlers.
* util/rust-hir-map.cc (Mappings::insert_macro_def): Use new handler
names.

2 years agogccrs: rust: Allow gccrs to build on x86_64-apple-darwin with clang/libc++
Simon Cook [Tue, 12 Apr 2022 14:45:56 +0000 (16:45 +0200)] 
gccrs: rust: Allow gccrs to build on x86_64-apple-darwin with clang/libc++

gcc/rust/ChangeLog:

* util/rust-inline-visitor.h: Remove some offending system includes.

2 years agogccrs: Implement the inline visitor
YizhePKU [Tue, 13 Apr 2021 07:28:36 +0000 (07:28 +0000)] 
gccrs: Implement the inline visitor

gcc/rust/ChangeLog:

* util/rust-inline-visitor.h: New file.

2 years agogccrs: Support Closure calls as generic trait bounds
Philip Herron [Thu, 20 Oct 2022 17:31:02 +0000 (18:31 +0100)] 
gccrs: Support Closure calls as generic trait bounds

gcc/rust/ChangeLog:

* backend/rust-compile-expr.cc (CompileExpr::visit): Refactor checking of closures.
(CompileExpr::generate_possible_fn_trait_call): New function.
* backend/rust-compile-expr.h: Declare `generate_possible_fn_trait_call`.

gcc/testsuite/ChangeLog:

* rust/execute/torture/closure2.rs: New test.

2 years agogccrs: Add missing type resolution for function type segments
Philip Herron [Thu, 20 Oct 2022 17:05:43 +0000 (18:05 +0100)] 
gccrs: Add missing type resolution for function type segments

gcc/rust/ChangeLog:

* typecheck/rust-tyty-bounds.cc (TypeCheckBase::get_predicate_from_bound): Add missing
implementation.

2 years agogccrs: Add missing hir lowering to function type-path segments
Philip Herron [Thu, 20 Oct 2022 16:59:27 +0000 (17:59 +0100)] 
gccrs: Add missing hir lowering to function type-path segments

gcc/rust/ChangeLog:

* Make-lang.in: Compile rust-ast-lower-type.cc.
* ast/rust-path.h: Add `get_locus` method to `TypePathFunction`.
* hir/rust-ast-lower-base.cc (ASTLowerTypePath::visit): Move implementation to
rust-ast-lower-type.cc.
(ASTLowerQualifiedPathInType::visit): Likewise.
(ASTLoweringType::visit): Likewise.
* hir/rust-ast-lower-type.h: Move implementations to source file.
* hir/tree/rust-hir-path.h: Likewise.
* hir/rust-ast-lower-type.cc: New file.

2 years agogccrs: Add missing name resolution to Function type-path segments
Philip Herron [Thu, 20 Oct 2022 16:59:03 +0000 (17:59 +0100)] 
gccrs: Add missing name resolution to Function type-path segments

gcc/rust/ChangeLog:

* resolve/rust-ast-resolve-type.cc (ResolveRelativeTypePath::go): Add missing handling of
function case.

2 years agogccrs: Closure support at CallExpr
Philip Herron [Wed, 19 Oct 2022 17:02:36 +0000 (18:02 +0100)] 
gccrs: Closure support at CallExpr

gcc/rust/ChangeLog:

* backend/rust-compile-context.h: Add new functions: `insert_closure_decl` and
`lookup_closure_decl`.
* backend/rust-compile-expr.cc (CompileExpr::visit): Start compiling Closures properly.
(CompileExpr::generate_closure_function): New function.
(CompileExpr::generate_closure_fntype): Likewise.
* backend/rust-compile-expr.h: Declare `generate_closure_function` and
`generate_closure_fntype`.
* backend/rust-compile-type.cc (TyTyResolveCompile::visit): Visit closure types properly.
* backend/rust-mangle.cc (legacy_mangle_name): Add support for closures.
* backend/rust-tree.h (RS_CLOSURE_FLAG): Add new tree macro.
(RS_CLOSURE_TYPE_P): And checking for it on tree nodes.
* typecheck/rust-tyty.cc (ClosureType::is_equal): Add implementation.

gcc/testsuite/ChangeLog:

* rust/execute/torture/closure1.rs: New test.

2 years agogccrs: Initial Type resolution for closures
Philip Herron [Tue, 18 Oct 2022 12:21:40 +0000 (13:21 +0100)] 
gccrs: Initial Type resolution for closures

gcc/rust/ChangeLog:

* hir/tree/rust-hir-expr.h: Add `get_params` method.
* typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit): Typecheck closure nodes.
(TypeCheckExpr::resolve_fn_trait_call): New function.
* typecheck/rust-hir-type-check-expr.h: Declare `resolve_fn_trait_call` and
`resolve_possible_fn_trait_call_method_name`.
* typecheck/rust-hir-type-check.h: Declare `get_context_type`.
* typecheck/rust-tyctx.cc (TypeCheckContextItem::get_context_type): New function.
* typecheck/rust-tyty-cmp.h: Visit closures properly.
* typecheck/rust-tyty-rules.h: Likewise.
* typecheck/rust-tyty.cc (BaseType::bounds_compatible): Add commented out assertin.
(ClosureType::as_string): Implement it.
(ClosureType::clone): Fix closure cloning.
(ClosureType::setup_fn_once_output): New function.
* typecheck/rust-tyty.h: Improve `ClosureType` class and declare `setup_fn_once_output`.

2 years agogccrs: Add closures to lints and error checking
Philip Herron [Wed, 19 Oct 2022 17:30:36 +0000 (18:30 +0100)] 
gccrs: Add closures to lints and error checking

gcc/rust/ChangeLog:

* checks/errors/rust-const-checker.cc (ConstChecker::visit): Visit closures properly.
* checks/errors/rust-unsafe-checker.cc (UnsafeChecker::visit): Likewise.
* checks/lints/rust-lint-marklive.h: Likewise.

2 years agogccrs: Refactor method call type checking
Philip Herron [Wed, 19 Oct 2022 09:59:18 +0000 (10:59 +0100)] 
gccrs: Refactor method call type checking

gcc/rust/ChangeLog:

* typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit): Simplify method
call type checking  by removing visitor and instead using one static cast. Use the
new interface.
* typecheck/rust-tyty-call.cc (TypeCheckMethodCallExpr::visit): Likewise.
(TypeCheckMethodCallExpr::go): Likewise.
(TypeCheckMethodCallExpr::check): Likewise.
* typecheck/rust-tyty-call.h (class TypeCheckMethodCallExpr): Likewise.
(class Argument): Likewise.

2 years agogccrs: Add name resolution for closures
Philip Herron [Mon, 17 Oct 2022 16:51:15 +0000 (17:51 +0100)] 
gccrs: Add name resolution for closures

gcc/rust/ChangeLog:

* resolve/rust-ast-resolve-expr.cc (ResolveExpr::visit): Visit closure properly when
name resolving.
(ResolveExpr::resolve_closure_param): Implement closure name resolving.
* resolve/rust-ast-resolve-expr.h: Declare visitors for closure types.

2 years agogccrs: Formatting cleanup in HIR lowering pattern
Philip Herron [Mon, 17 Oct 2022 16:27:01 +0000 (17:27 +0100)] 
gccrs: Formatting cleanup in HIR lowering pattern

gcc/rust/ChangeLog:

* hir/rust-ast-lower-pattern.cc (ASTLoweringPattern::ASTLoweringPattern):
Improve formatting.
(ASTLoweringPattern::translate): Likewise.
* hir/rust-ast-lower-pattern.h: Likewise.
* resolve/rust-ast-resolve-expr.h: Likewise.

2 years agogccrs: Refactor expression hir lowering into cc file
Philip Herron [Mon, 17 Oct 2022 15:51:05 +0000 (16:51 +0100)] 
gccrs: Refactor expression hir lowering into cc file

gcc/rust/ChangeLog:

* Make-lang.in: Add new object file for expression lowering.
* ast/rust-expr.h: Move implementation of expr lowering to source file.
* backend/rust-compile-block.h: Likewise.
* backend/rust-compile-expr.cc (CompileExpr::visit): Likewise.
* backend/rust-compile-expr.h: Likewise.
* checks/errors/privacy/rust-privacy-reporter.cc (PrivacyReporter::visit): Likewise.
* checks/errors/privacy/rust-privacy-reporter.h: Likewise.
* checks/errors/rust-const-checker.cc (ConstChecker::visit): Likewise.
* checks/errors/rust-const-checker.h: Likewise.
* checks/errors/rust-unsafe-checker.cc (UnsafeChecker::visit): Likewise.
* checks/errors/rust-unsafe-checker.h: Likewise.
* hir/rust-ast-lower-base.h: Likewise.
* hir/rust-ast-lower-expr.h (RUST_AST_LOWER_EXPR): Likewise.
* hir/rust-ast-lower.cc (ASTLoweringBase::lower_closure_param): Likewise.
* hir/rust-hir-dump.cc (Dump::visit): Likewise.
* hir/rust-hir-dump.h: Likewise.
* hir/tree/rust-hir-expr.h (class ClosureExpr): Likewise.
(class ClosureExprInner): Likewise.
(class ClosureExprInnerTyped): Likewise.
* hir/tree/rust-hir-full-decls.h (class ClosureExprInner): Likewise.
(class ClosureExprInnerTyped): Likewise.
* hir/tree/rust-hir-full-test.cc (ClosureExprInnerTyped::as_string): Likewise.
(ClosureExprInner::as_string): Likewise.
(ClosureExprInner::accept_vis): Likewise.
(ClosureExpr::accept_vis): Likewise.
(ClosureExprInnerTyped::accept_vis): Likewise.
* hir/tree/rust-hir-visitor.h: Likewise.
* hir/tree/rust-hir.h (class Expr): Likewise.
* typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit): Likewise.
* typecheck/rust-hir-type-check-expr.h: Likewise.
* hir/rust-ast-lower-expr.cc: New file.

2 years agogccrs: Add missing fn_once_output langitem
Philip Herron [Mon, 17 Oct 2022 15:50:34 +0000 (16:50 +0100)] 
gccrs: Add missing fn_once_output langitem

gcc/rust/ChangeLog:

* util/rust-lang-item.h: Add handling for `fn_once_output`.

2 years agogccrs: ast: Improve Fragment API
Arthur Cohen [Wed, 19 Oct 2022 12:53:43 +0000 (14:53 +0200)] 
gccrs: ast: Improve Fragment API

gcc/rust/ChangeLog:

* ast/rust-ast-fragment.cc (Fragment::Fragment): Add better APIs.
(Fragment::complete): New function.
(Fragment::unexpanded): New function.
* ast/rust-ast-fragment.h: Declare new APIs and add documentation.
* expand/rust-attribute-visitor.h: Use new Fragment API.
* expand/rust-macro-builtins.cc (MacroBuiltin::file): Likewise.
(MacroBuiltin::column): Likewise.
(MacroBuiltin::include_bytes): Likewise.
(MacroBuiltin::include_str): Likewise.
(MacroBuiltin::concat): Likewise.
(MacroBuiltin::env): Likewise.
(MacroBuiltin::cfg): Likewise.
(MacroBuiltin::include): Likewise.
(MacroBuiltin::line): Likewise.
* expand/rust-macro-expand.cc (parse_many): Likewise.
(transcribe_expression): Likewise.
(transcribe_type): Likewise.
* expand/rust-macro-expand.h (struct MacroExpander): Likewise.

2 years agogccrs: rust: Replace uses of ASTFragment -> Fragment
Arthur Cohen [Wed, 19 Oct 2022 12:05:54 +0000 (14:05 +0200)] 
gccrs: rust: Replace uses of ASTFragment -> Fragment

gcc/rust/ChangeLog:

* ast/rust-ast.h (class ASTFragment): Remove old ASTFragment class.
* ast/rust-macro.h (class MacroRulesDefinition): Use new Fragment API.
* expand/rust-attribute-visitor.h: Likewise.
* expand/rust-macro-builtins.cc (macro_end_token): Likewise.
(MacroBuiltin::assert): Likewise.
(MacroBuiltin::file): Likewise.
(MacroBuiltin::column): Likewise.
(MacroBuiltin::include_bytes): Likewise.
(MacroBuiltin::include_str): Likewise.
(MacroBuiltin::compile_error): Likewise.
(MacroBuiltin::concat): Likewise.
(MacroBuiltin::env): Likewise.
(MacroBuiltin::cfg): Likewise.
(MacroBuiltin::include): Likewise.
(MacroBuiltin::line): Likewise.
* expand/rust-macro-builtins.h: Likewise.
* expand/rust-macro-expand.cc (MacroExpander::expand_decl_macro): Likewise.
(MacroExpander::expand_invoc): Likewise.
(MacroExpander::match_repetition): Likewise.
(parse_many): Likewise.
(transcribe_many_items): Likewise.
(transcribe_many_ext): Likewise.
(transcribe_many_trait_items): Likewise.
(transcribe_many_impl_items): Likewise.
(transcribe_many_trait_impl_items): Likewise.
(transcribe_expression): Likewise.
(transcribe_type): Likewise.
(transcribe_on_delimiter): Likewise.
(tokens_to_str): Likewise.
* expand/rust-macro-expand.h (struct MacroExpander): Likewise.
* util/rust-hir-map.cc (Mappings::insert_macro_def): Likewise.

2 years agogccrs: ast: Refactor ASTFragment -> Fragment class
Arthur Cohen [Wed, 19 Oct 2022 11:54:04 +0000 (13:54 +0200)] 
gccrs: ast: Refactor ASTFragment -> Fragment class

gcc/rust/ChangeLog:

* Make-lang.in: Add `rust-ast-fragment.o` object file.
* ast/rust-ast-fragment.cc: New file.
* ast/rust-ast-fragment.h: New file.

2 years agogccrs: Add check for recursive trait cycles
Philip Herron [Mon, 17 Oct 2022 10:35:26 +0000 (11:35 +0100)] 
gccrs: Add check for recursive trait cycles

gcc/rust/ChangeLog:

* typecheck/rust-hir-trait-resolve.cc (TraitResolver::resolve_trait): Check if a
trait query is currently in progress.
* typecheck/rust-hir-type-check.h (class TraitQueryGuard): Add helpers around
checking for trait queries and inserting them.

gcc/testsuite/ChangeLog:

* rust/compile/issue-1589.rs: New test.

2 years agogccrs: dump: Dump macro rules definition
Arthur Cohen [Tue, 27 Sep 2022 14:24:59 +0000 (16:24 +0200)] 
gccrs: dump: Dump macro rules definition

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Add missing visitors for macro definition dumping.
(get_delimiters): New function.
* ast/rust-ast-dump.h: Declare `get_delimiters` and add documentation.
* ast/rust-macro.h: Add `get_token_tree` method.

2 years agogccrs: ast: Module: unloaded module and inner attributes
Jakub Dupak [Sat, 15 Oct 2022 19:30:40 +0000 (21:30 +0200)] 
gccrs: ast: Module: unloaded module and inner attributes

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Properly handle unloaded modules.

Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2 years agogccrs: dump: Fix module dumping
Arthur Cohen [Fri, 14 Oct 2022 14:55:47 +0000 (16:55 +0200)] 
gccrs: dump: Fix module dumping

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Fix formatting when dumping modules.

2 years agogccrs: dump: Dump items within modules
Arthur Cohen [Tue, 27 Sep 2022 13:52:57 +0000 (15:52 +0200)] 
gccrs: dump: Dump items within modules

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Dump items in modules properly.

2 years agogccrs: dump: Emit visibility when dumping items
Arthur Cohen [Tue, 27 Sep 2022 13:50:39 +0000 (15:50 +0200)] 
gccrs: dump: Emit visibility when dumping items

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc: Emit visibility when dumping items.

2 years agogccrs: Support outer attribute handling on trait items just like normal items
Philip Herron [Fri, 14 Oct 2022 15:06:33 +0000 (16:06 +0100)] 
gccrs: Support outer attribute handling on trait items just like normal items

gcc/rust/ChangeLog:

* hir/rust-ast-lower-base.h (class ItemWrapper): New class.
* hir/rust-ast-lower-base.cc (ASTLoweringBase::handle_outer_attributes): Use
`ItemWrapper` class.
(ASTLoweringBase::handle_doc_item_attribute): Likewise.
(ASTLoweringBase::handle_lang_item_attribute): Likewise.
* hir/rust-ast-lower-implitem.h: Check outer attributes on items.
* hir/tree/rust-hir-item.h: Add `get_trait_locus` methods.
* hir/tree/rust-hir.h: Likewise.
* util/rust-hir-map.h: Add defId mappings and associated functions.
* util/rust-hir-map.cc (Mappings::insert_defid_mapping): Implement insertion to said
mappings.
(Mappings::lookup_trait_item_defid): And looking up said mappings.

2 years agogccrs: ast: dump TypeAlias
Jakub Dupak [Fri, 14 Oct 2022 10:38:19 +0000 (12:38 +0200)] 
gccrs: ast: dump TypeAlias

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Add code for dumping type aliases.

Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2 years agogccrs: Refactor TraitResolver to not require a visitor
Philip Herron [Fri, 14 Oct 2022 13:00:16 +0000 (14:00 +0100)] 
gccrs: Refactor TraitResolver to not require a visitor

gcc/rust/ChangeLog:

* typecheck/rust-hir-trait-resolve.cc (TraitResolver::TraitResolver): Do not nullptr init
`resolved_trait_reference` anymore.
(TraitResolver::resolve_path): Simplify function and rename to...
(TraitResolver::resolve_path_to_trait): ...this.
(TraitResolver::lookup_path): Use new interface.
* typecheck/rust-hir-trait-resolve.h (class TraitResolver): Do not inherit `HIRFullVisitor`
class anymore.

2 years agogccrs: ast: dump: RangeExprs
David Faust [Thu, 13 Oct 2022 17:23:44 +0000 (10:23 -0700)] 
gccrs: ast: dump: RangeExprs

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Add dump for RangeExprs.

2 years agogccrs: ast: dump: various simple Exprs
David Faust [Thu, 13 Oct 2022 17:15:05 +0000 (10:15 -0700)] 
gccrs: ast: dump: various simple Exprs

Adds dump for:
- BorrowExpr
- DereferenceExpr
- ErrorPropagationExpr
- NegationExpr
- TypeCastExpr
- GroupedExpr

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Add dump for, BorrowExpr, DereferenceExpr,
ErrorPropagationExpr, NegationExpr, TypeCastExpr and GroupedExpr.

2 years agogccrs: ast: dump: ArrayExpr
David Faust [Thu, 13 Oct 2022 17:14:38 +0000 (10:14 -0700)] 
gccrs: ast: dump: ArrayExpr

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Add dump code for ArrayExpr.

2 years agogccrs: ast: dump: ComparisonExpr and LazyBooleanExpr
David Faust [Thu, 13 Oct 2022 16:28:33 +0000 (09:28 -0700)] 
gccrs: ast: dump: ComparisonExpr and LazyBooleanExpr

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Add dumps for ComparisonExpr and
LazyBooleanExpr.

2 years agogccrs: ast: dump: minor fixups to IfExpr formatting
David Faust [Thu, 13 Oct 2022 16:27:35 +0000 (09:27 -0700)] 
gccrs: ast: dump: minor fixups to IfExpr formatting

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Fix IfExpr formatting.

2 years agogccrs: ast: dump: fix extra newline in block without tail
David Faust [Thu, 13 Oct 2022 16:25:57 +0000 (09:25 -0700)] 
gccrs: ast: dump: fix extra newline in block without tail

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Fix block formatting.

2 years agogccrs: Method resolution must support multiple candidates
Philip Herron [Thu, 13 Oct 2022 09:10:37 +0000 (10:10 +0100)] 
gccrs: Method resolution must support multiple candidates

This patch fixes bad method resolution in our operator_overload_9 case.
When we have a &mut reference to something and we deref we must resolve to
the mutable reference impl block. The interface we are using to resolve
methods is the can_eq interface which allows for permissive mutability
which means allowing for mutable reference being unified with an immutable
one. This meant we actual match against both the immutable and mutable
version leading to multiple candidate error.

The fix here adds a method resolution flag to the can_eq interface so that
we enforce mutability equality. The other hack is that we do not allow
can_eq of ParamTypes to generic Slices. I think there is some subtle thing
going on for that case. The Rustc method resolver actually filters the
impl blocks for reference types based looking up the relevant lang items
we need to do this as well but is a much larger refactor to our method
resolver which should be done seperately.

Fixes #1588

gcc/rust/ChangeLog:

* typecheck/rust-autoderef.cc: Add support for multiple resolution candidates.
* typecheck/rust-hir-dot-operator.cc (MethodResolver::MethodResolver): Edit
`try_result` field and change constructor.
(MethodResolver::Probe): Return set of candidates instead of singular candidate.
(MethodResolver::select): Add better implementation to account for multiple
candidates.
* typecheck/rust-hir-dot-operator.h (struct MethodCandidate): Overload comparison
operator in order to store them in `std::set`.
* typecheck/rust-hir-inherent-impl-overlap.h: Do not fail assertion on missing type.
* typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit): Adapt code to use
multiple candidates.
* typecheck/rust-tyty.cc (set_cmp_autoderef_mode): Add code to handle automatic
derefs properly.
(reset_cmp_autoderef_mode): Add helper function to reset said mode.
* typecheck/rust-tyty.h (set_cmp_autoderef_mode): Declare function.
(reset_cmp_autoderef_mode): Likewise.
* typecheck/rust-tyty-cmp.h: Add handling of `autoderef_cmp_flag`

gcc/testsuite/ChangeLog:

* rust/compile/generics7.rs: Fix test with missing assertion.
* rust/execute/torture/operator_overload_9.rs: Fix test assertion.

2 years agogccrs: Add ABI mappings for rust-call to map to ABI::RUST
Philip Herron [Wed, 12 Oct 2022 11:26:24 +0000 (12:26 +0100)] 
gccrs: Add ABI mappings for rust-call to map to ABI::RUST

gcc/rust/ChangeLog:

* util/rust-abi.cc (get_abi_from_string): Add missing "rust-call"
possibility for ABI variant.

2 years agogccrs: Add mappings for fn_once lang item
Philip Herron [Wed, 12 Oct 2022 11:25:52 +0000 (12:25 +0100)] 
gccrs: Add mappings for fn_once lang item

gcc/rust/ChangeLog:

* util/rust-lang-item.h: Add `fn_once` lang item.

2 years agogccrs: Support type resolution on super traits on dyn objects
Philip Herron [Thu, 6 Oct 2022 13:46:17 +0000 (14:46 +0100)] 
gccrs: Support type resolution on super traits on dyn objects

When checking if specified bounds satisfy other bounds we must lookup the
super traits. To finish the support for super traits we need to redo the
computation of method addresses to support super traits.

Addresses #914

gcc/rust/ChangeLog:

* backend/rust-compile.cc: Add note about missing support for super
traits.
* typecheck/rust-tyty.cc (BaseType::satisfies_bound): New function.
(BaseType::bounds_compatible): New function.
(DynamicObjectType::get_object_items): New function.
* typecheck/rust-hir-trait-ref.h: Use new API to perform type resolution
on dyn objects.

2 years agogccrs: early-name-resolver: Add simple macro name resolution
Arthur Cohen [Tue, 11 Oct 2022 09:12:50 +0000 (11:12 +0200)] 
gccrs: early-name-resolver: Add simple macro name resolution

This name resolver performs the same macro name resolution as what was
previously done by the AttrVisitor visitor and macro expander.

It also resolves macro expressions in builtin-macros properly, as well
as expanded AST nodes when necessary.

gcc/rust/ChangeLog:

* Make-lang.in: Compile early name resolver.
* expand/rust-attribute-visitor.cc (AttrVisitor::visit): Move macro
name resolution.
* expand/rust-macro-builtins.cc (try_expand_macro_expression): Run ENR
when recursively expanding macros.
* expand/rust-macro-expand.cc (MacroExpander::expand_invoc): No longer
perform name resolution in `expand_invoc`.
* expand/rust-macro-expand.h (struct MacroExpander): Keep ENR within
MacroExpander.
* rust-session-manager.cc (Session::expansion): Run ENR.
* resolve/rust-early-name-resolver.cc: New file.
* resolve/rust-early-name-resolver.h: New file.

2 years agogccrs: ast: Add accept_vis() method to `GenericArg`
Arthur Cohen [Tue, 11 Oct 2022 13:54:07 +0000 (15:54 +0200)] 
gccrs: ast: Add accept_vis() method to `GenericArg`

gcc/rust/ChangeLog:

* ast/rust-path.h: Add `accept_vis` method to `GenericArg` class.

2 years agogccrs: rust-ast-resolve-item: Add note about resolving glob uses
Arthur Cohen [Tue, 11 Oct 2022 09:39:15 +0000 (11:39 +0200)] 
gccrs: rust-ast-resolve-item: Add note about resolving glob uses

gcc/rust/ChangeLog:

* resolve/rust-ast-resolve-item.cc (ResolveItem::visit): Add note for
glob import resolving.