]> git.ipfire.org Git - thirdparty/gcc.git/log
thirdparty/gcc.git
18 months agogccrs: Emit error with proc macro on non functions
Pierre-Emmanuel Patry [Fri, 21 Jul 2023 10:41:12 +0000 (12:41 +0200)] 
gccrs: Emit error with proc macro on non functions

An error should be emitted when a proc_macro, proc_macro_attribute or
proc_macro_derive attribute is met on any non function item. Those
attribute shall be placed only on bare functions.

gcc/rust/ChangeLog:

* util/rust-attributes.cc (is_proc_macro_type): Add function to
identify matching proc macro attribute type.
(check_proc_macro_non_function): Add function to check and emit
error.
(AttributeChecker::visit): Add cal to new check function.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: Remove NodeId member from Identifier
Pierre-Emmanuel Patry [Thu, 13 Jul 2023 12:50:38 +0000 (14:50 +0200)] 
gccrs: Remove NodeId member from Identifier

Remove the NodeId member from identifiers. This member did not make
sense and was solely used for procedural macros.

gcc/rust/ChangeLog:

* ast/rust-ast.h: Remove NodeId from identifiers.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: [E0045] Variadic Parameters Used on Non-C ABI Function
Muhammad Mahad [Wed, 19 Jul 2023 10:49:25 +0000 (15:49 +0500)] 
gccrs: [E0045] Variadic Parameters Used on Non-C ABI Function

Added error code support for using variadic parameters used
on Non-C ABI function. Fixes #2382

gcc/rust/ChangeLog:

* typecheck/rust-hir-type-check-implitem.cc (TypeCheckTopLevelExternItem::visit):
Added check for error code support.

gcc/testsuite/ChangeLog:

* rust/compile/abi-vardaic.rs: New test.

Signed-off-by: Muhammad Mahad <mahadtxt@gmail.com>
18 months agogccrs: [E0323] Implemented associated const, expected another trait
Muhammad Mahad [Tue, 18 Jul 2023 13:55:32 +0000 (18:55 +0500)] 
gccrs: [E0323] Implemented associated const, expected another trait

Refactored Error message similiar to rustc.

gcc/rust/ChangeLog:

* typecheck/rust-hir-type-check-implitem.cc (TypeCheckImplItemWithTrait::visit):
called error function.

gcc/testsuite/ChangeLog:

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

Signed-off-by: Muhammad Mahad <mahadtxt@gmail.com>
18 months agogccrs: proc_macro: Mirror FFIString changes in C++library
Pierre-Emmanuel Patry [Wed, 26 Jul 2023 13:39:25 +0000 (15:39 +0200)] 
gccrs: proc_macro: Mirror FFIString changes in C++library

Recent changes in the rust interface on some extern C function shall be
synced up in the C++ library.

libgrust/ChangeLog:

* libproc_macro/literal.cc (Literal__from_string):
Update to match rust interface.
* libproc_macro/literal.h (Literal__from_string):
Likewise.
* libproc_macro/tokenstream.cc (TokenStream__from_string):
Likewise.
* libproc_macro/tokenstream.h (TokenStream__from_string):
Likewise.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: proc_macro: Increase FFIString usage
Pierre-Emmanuel Patry [Wed, 26 Jul 2023 13:26:55 +0000 (15:26 +0200)] 
gccrs: proc_macro: Increase FFIString usage

Two remaining structures in the rust interface were still using raw
string pointer and length couples to communicate with the C++ library
throught extern C functions. Using FFIString instead allow us to reduce
the scope of potential errors using those raw pointers. As FFIString
encapsulate raw pointer operations there will be only one locaiton to
look after.

libgrust/ChangeLog:

* libproc_macro/rust/bridge/literal.rs: Change extern C
function argument from raw string pointer and length to
FFIString.
* libproc_macro/rust/bridge/token_stream.rs: Likewise.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: Continue to replace usages of Location with location_t
Owen Avery [Mon, 10 Jul 2023 20:06:27 +0000 (16:06 -0400)] 
gccrs: Continue to replace usages of Location with location_t

gcc/rust/ChangeLog:

* backend/rust-compile-base.cc: Replace Location with location_t.
* backend/rust-compile-base.h: Likewise.
* backend/rust-compile-expr.cc: Likewise.
* lex/rust-token.h: Likewise.
* metadata/rust-import-archive.cc: Likewise.
* metadata/rust-imports.cc: Likewise.
* metadata/rust-imports.h: Likewise.
* rust-backend.h: Likewise.
* rust-diagnostics.cc: Likewise.
* rust-diagnostics.h: Likewise.
* rust-gcc.cc: Likewise.
* rust-linemap.cc: Likewise.
* util/rust-token-converter.cc: Likewise.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
18 months agogccrs: Replace usages of Location with location_t in the lexer, AST, and HIR
Owen Avery [Mon, 10 Jul 2023 20:13:59 +0000 (16:13 -0400)] 
gccrs: Replace usages of Location with location_t in the lexer, AST, and HIR

gcc/rust/ChangeLog:

* ast/rust-ast-builder.h: Replace Location with location_t.
* ast/rust-ast.h: Likewise.
* ast/rust-expr.h: Likewise.
* ast/rust-item.h: Likewise.
* ast/rust-macro.h: Likewise.
* ast/rust-path.h: Likewise.
* hir/tree/rust-hir-expr.h: Likewise.
* hir/tree/rust-hir-item.h: Likewise.
* hir/tree/rust-hir-path.h: Likewise.
* hir/tree/rust-hir.h: Likewise.
* lex/rust-lex.cc: Likewise.
* lex/rust-lex.h: Likewise.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
18 months agogccrs: Replace Location with location_t in parsing and macro expansion
Owen Avery [Mon, 10 Jul 2023 20:21:36 +0000 (16:21 -0400)] 
gccrs: Replace Location with location_t in parsing and macro expansion

gcc/rust/ChangeLog:

* expand/rust-derive-clone.cc: Replace Location with location_t.
* expand/rust-derive-clone.h: Likewise.
* expand/rust-derive-copy.cc: Likewise.
* expand/rust-derive-copy.h: Likewise.
* expand/rust-derive.cc: Likewise.
* expand/rust-derive.h: Likewise.
* expand/rust-macro-builtins.cc: Likewise.
* expand/rust-macro-builtins.h: Likewise.
* expand/rust-macro-expand.cc: Likewise.
* parse/rust-parse-impl.h: Likewise.
* parse/rust-parse.cc: Likewise.
* parse/rust-parse.h: Likewise.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
18 months agogccrs: Improve keyword check while parsing a macro match
Owen Avery [Tue, 16 May 2023 17:35:07 +0000 (13:35 -0400)] 
gccrs: Improve keyword check while parsing a macro match

gcc/rust/ChangeLog:

* parse/rust-parse-impl.h
(Parser::parse_macro_match): Use token_id_is_keyword.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
18 months agogccrs: resolve: Remove ProcMacroInvocable interface
Pierre-Emmanuel Patry [Thu, 13 Jul 2023 10:48:18 +0000 (12:48 +0200)] 
gccrs: resolve: Remove ProcMacroInvocable interface

Since all identifiers in attributes are converted to SimplePath, this
common interface is no longer required.

gcc/rust/ChangeLog:

* ast/rust-ast.h (class Identifier): Remove interface
inheritance.
(class SimplePath): Likewise.
* expand/rust-expand-visitor.cc (get_traits_to_derive): Change
return type.
(derive_item): Update according to get_traits_to_derive return
type.
(expand_item_attribute): Likewise.
(ExpandVisitor::expand_inner_stmts): Likewise.
* expand/rust-macro-expand.h (struct MacroExpander): Likewise.
* util/rust-hir-map.cc (Mappings::insert_derive_proc_macro_invocation):
Change input type to SimplePath.
(Mappings::lookup_derive_proc_macro_invocation): Likewise.
(Mappings::insert_attribute_proc_macro_invocation): Likewise.
(Mappings::lookup_attribute_proc_macro_invocation): Likewise.
* util/rust-hir-map.h: Likewise with function prototypes.
* util/rust-proc-macro-invocation.h: Removed.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: resolve: Convert identifier to a SimplePath
Pierre-Emmanuel Patry [Thu, 13 Jul 2023 09:57:41 +0000 (11:57 +0200)] 
gccrs: resolve: Convert identifier to a SimplePath

We wish to remove node ids from identifiers, because they do not make
that much sense and are only used for procedural macros anyway. This
means we either have to wrap those into a structure or converting them
to an existing structure that already have a node id. This commit
convert those meta word identifiers to a meta path SimplePath.

gcc/rust/ChangeLog:

* ast/rust-ast.h: Add new constructor for SimplePath from an
identifier.
* expand/rust-expand-visitor.cc (get_traits_to_derive): Add
conversion.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: resolve: Add mappings for proc macros and resolving
Pierre-Emmanuel Patry [Mon, 19 Jun 2023 10:51:34 +0000 (12:51 +0200)] 
gccrs: resolve: Add mappings for proc macros and resolving

Add multiple mappings for procedural macro name resolution.
Procedural macros were not resolved using name resolution and mapping
but rather with some hacky path comparison.

gcc/rust/ChangeLog:

* expand/rust-macro-expand.cc (MacroExpander::import_proc_macros):
Remove function.
* expand/rust-macro-expand.h (struct MacroExpander): Remove
import_proc_macro function.
* util/rust-hir-map.cc (Mappings::insert_derive_proc_macro_def):
Add a function to insert a derive proc macro definition.
(Mappings::insert_bang_proc_macro): Remove function.
(Mappings::insert_bang_proc_macro_def): Add function to insert a
bang proc macro definition.
(Mappings::insert_attribute_proc_macro_def): Likewise with
attribute proc macros.
(Mappings::lookup_derive_proc_macro_def): Add a function to
lookup a defined derive proc macro definition.
(Mappings::lookup_bang_proc_macro): Remove function.
(Mappings::lookup_bang_proc_macro_def): Add a function to lookup
a bang proc macro definition.
(Mappings::lookup_attribute_proc_macro_def): Add a function to
lookup an attribute prod macro definition.
(Mappings::insert_derive_proc_macro_invocation): Add a function
to insert a derive proc macro invocation.
(Mappings::lookup_derive_proc_macro_invocation): Add a function
to lookup a derive proc macro invocation.
(Mappings::insert_bang_proc_macro_invocation): Add a function to
insert a bang proc macro invocation.
(Mappings::lookup_bang_proc_macro_invocation): Add a function to
lookup a bang proc macro invocation.
(Mappings::insert_attribute_proc_macro_invocation): Add a
function to insert an attribute proc macro invocation.
(Mappings::lookup_attribute_proc_macro_invocation): Add a
function to lookup an attribute proc macro invocation.
* util/rust-hir-map.h: Add different proc macro mappings
and change function prototypes.
* expand/rust-expand-visitor.cc (get_traits_to_derive): Return a
vector of SimplePath instead.
(derive_item): Accept SimplePath instead of a string.
* ast/rust-ast.h: Add common ProcMacroInvocable interface to
Identifiers and SimplePath nodes.
* ast/rust-ast.cc: Add const modifier.
* ast/rust-macro.h: Change path and identifier getters.
* ast/rust-path.h: Change return type to reference.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: attribute: Add missing header guard
Pierre-Emmanuel Patry [Tue, 20 Jun 2023 13:46:20 +0000 (15:46 +0200)] 
gccrs: attribute: Add missing header guard

Missing header guard may cause infinitie include recursion.

gcc/rust/ChangeLog:

* util/rust-attributes.h (RUST_ATTRIBUTES_H): Add missing header
guard.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: ast: Add manual dispatch for meta item downcasting
Pierre-Emmanuel Patry [Tue, 20 Jun 2023 11:26:45 +0000 (13:26 +0200)] 
gccrs: ast: Add manual dispatch for meta item downcasting

Several meta items shall be downcasted in various places, this commit
introduces values to dispatch on.

gcc/rust/ChangeLog:

* ast/rust-ast.h (class MetaItem): Add MetaItem dispatch values.
* ast/rust-expr.h: Add LitExpr and PathLit dispatch.
* ast/rust-macro.h: Add remaining dispatch getters.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: resolve: Add extern crate proc macro collection
Pierre-Emmanuel Patry [Fri, 16 Jun 2023 16:17:39 +0000 (18:17 +0200)] 
gccrs: resolve: Add extern crate proc macro collection

Create a mapping for procedural macros with their crate num.

gcc/rust/ChangeLog:

* metadata/rust-extern-crate.h: Add proc macro getter.
* rust-session-manager.cc (Session::load_extern_crate): Collect
mappings and create mappings.
* util/rust-hir-map.cc: Add insertion and lookup functions for
every mapping.
* util/rust-hir-map.h: Add function prototypes.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: import: Load procedural macros into external crate
Pierre-Emmanuel Patry [Thu, 15 Jun 2023 14:37:07 +0000 (16:37 +0200)] 
gccrs: import: Load procedural macros into external crate

Load the procedural macro array into the external crate structure.

gcc/rust/ChangeLog:

* metadata/rust-imports.cc (Import::try_package_in_directory):
Add call to load macros before loading metadatas.
* expand/rust-proc-macro.cc: Return empty vector instead of
panicking on error.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: import: Change raw pointer to unique_ptr
Pierre-Emmanuel Patry [Thu, 15 Jun 2023 13:32:38 +0000 (15:32 +0200)] 
gccrs: import: Change raw pointer to unique_ptr

Replace Stream raw pointer with a smart pointer.

gcc/rust/ChangeLog:

* metadata/rust-import-archive.cc (Stream_concatenate::do_peek):
Remove deletion.
(Stream_concatenate::do_advance): Likewise.
(Import::find_archive_export_data): Replace with a smart
pointer.
* metadata/rust-imports.cc (add_search_path): Change return type
to smart pointer.
(Import::open_package): Likewise.
(Import::try_package_in_directory): Likewise.
(Import::find_export_data): Likewise.
(Import::find_object_export_data): Likewise.
(Import::Import): Change constructor to accept unique_ptr.
* metadata/rust-imports.h: Change constructor prototype.
* rust-session-manager.cc (Session::load_extern_crate): Change
pointer to smart pointer.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: import: Store procedural macros in extern crate
Pierre-Emmanuel Patry [Thu, 15 Jun 2023 11:58:08 +0000 (13:58 +0200)] 
gccrs: import: Store procedural macros in extern crate

Store procedural macro data in extern crate node.

gcc/rust/ChangeLog:

* metadata/rust-extern-crate.cc (ExternCrate::ExternCrate):
Change constructor to accept procedural macro vector.
* metadata/rust-extern-crate.h: Add vector of procecural macro
in extern crate.
* rust-session-manager.cc (Session::load_extern_crate): Add
argument to new constructor call.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: import: Change package opening prototypes
Pierre-Emmanuel Patry [Thu, 15 Jun 2023 11:49:43 +0000 (13:49 +0200)] 
gccrs: import: Change package opening prototypes

Also return a vector of proc macros when trying to open an external
crate.

gcc/rust/ChangeLog:

* metadata/rust-imports.cc (add_search_path): Change prototype,
now return a pair of Stream and procedural macro vector.
(Import::open_package): Likewise.
(Import::try_package_in_directory): Likewise.
* metadata/rust-imports.h: Likewise.
* rust-session-manager.cc (Session::load_extern_crate):
Likewise.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: import: Add cli extern crate resolution
Pierre-Emmanuel Patry [Wed, 14 Jun 2023 13:20:21 +0000 (15:20 +0200)] 
gccrs: import: Add cli extern crate resolution

This commit add the ability to specify the path to an extern crate
through the -frust-extern cli option. Path given as cli argument
shall resolve to the exact extern crate location.

gcc/rust/ChangeLog:

* metadata/rust-imports.h: Make the function to load a given
file public.
* rust-session-manager.cc (Session::load_extern_crate): Change
path resolution depending on extern crate declaration in cli
arguments.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: Replace default argument with UNDEF_LOCATION
Owen Avery [Tue, 18 Jul 2023 19:55:51 +0000 (15:55 -0400)] 
gccrs: Replace default argument with UNDEF_LOCATION

gcc/rust/ChangeLog:

* ast/rust-ast-collector.h
(TokenCollector::visit):
Replace default argument with UNDEF_LOCATION.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
18 months agogccrs: Replace Location with location_t in gccrs backend
Owen Avery [Tue, 11 Jul 2023 02:33:08 +0000 (22:33 -0400)] 
gccrs: Replace Location with location_t in gccrs backend

gcc/rust/ChangeLog:

* backend/rust-compile-base.cc: Replace Location with location_t.
* backend/rust-compile-base.h: Likewise.
* backend/rust-compile-block.cc: Likewise.
* backend/rust-compile-expr.cc: Likewise.
* backend/rust-compile-expr.h: Likewise.
* backend/rust-compile-extern.h: Likewise.
* backend/rust-compile-implitem.h: Likewise.
* backend/rust-compile-intrinsic.cc: Likewise.
* backend/rust-compile-item.h: Likewise.
* backend/rust-compile-pattern.h: Likewise.
* backend/rust-compile-resolve-path.cc: Likewise.
* backend/rust-compile-stmt.cc: Likewise.
* backend/rust-compile-type.cc: Likewise.
* backend/rust-compile.cc: Likewise.
* backend/rust-constexpr.cc: Likewise.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
18 months agogccrs: [E0268] break or continue used outside of loop
Muhammad Mahad [Wed, 19 Jul 2023 15:54:28 +0000 (20:54 +0500)] 
gccrs: [E0268] break or continue used outside of loop

Refactored error description similiar to rustc.

gcc/rust/ChangeLog:

* typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit):
refactored and call error function.

gcc/testsuite/ChangeLog:

* rust/compile/break1.rs: Modified to pass test case.
* rust/compile/continue1.rs: likewise.
* rust/compile/break_continue_outside_loop.rs: New test.

Signed-off-by: Muhammad Mahad <mahadtxt@gmail.com>
18 months agogccrs: Add a test for malformed derive declaration input
Pierre-Emmanuel Patry [Tue, 18 Jul 2023 14:10:01 +0000 (16:10 +0200)] 
gccrs: Add a test for malformed derive declaration input

Add a new test to highlight possible future regressions on malformed
proc_macro_derive input.

gcc/testsuite/ChangeLog:

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

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: proc macro: Add crate type regression tests
Pierre-Emmanuel Patry [Tue, 18 Jul 2023 13:43:06 +0000 (15:43 +0200)] 
gccrs: proc macro: Add crate type regression tests

Add several tests to prevent regression with proc_macro,
proc_macro_derive and proc_macro_attribute attributes error messages.

gcc/testsuite/ChangeLog:

* rust/compile/proc_macro_attribute_crate_type.rs: New test.
* rust/compile/proc_macro_crate_type.rs: New test.
* rust/compile/proc_macro_derive_crate_type.rs: New test.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: proc macro: Add help message to malformed derive
Pierre-Emmanuel Patry [Tue, 18 Jul 2023 12:38:58 +0000 (14:38 +0200)] 
gccrs: proc macro: Add help message to malformed derive

Add an help message in case of malformed proc_macro_derive declaration.

gcc/rust/ChangeLog:

* util/rust-attributes.cc (AttributeChecker::visit): Add help
message.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: proc macro: Detect malformed proc_macro_derive
Pierre-Emmanuel Patry [Tue, 18 Jul 2023 11:37:03 +0000 (13:37 +0200)] 
gccrs: proc macro: Detect malformed proc_macro_derive

A derive procedural macro declaration shall always have at least a trait
to refer to. We should error out when it doesn't.

gcc/rust/ChangeLog:

* util/rust-attributes.cc (AttributeChecker::visit): Add
attribute input check.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: proc macros: Add crate type attribute check
Pierre-Emmanuel Patry [Tue, 18 Jul 2023 11:26:46 +0000 (13:26 +0200)] 
gccrs: proc macros: Add crate type attribute check

A procedural macroa attribute can only be used on proc macro crates.

gcc/rust/ChangeLog:

* util/rust-attributes.cc (AttributeChecker::visit): Add
attribute check on functions.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: libproc_macro: Change rust Ident definition
Pierre-Emmanuel Patry [Wed, 19 Jul 2023 11:18:14 +0000 (13:18 +0200)] 
gccrs: libproc_macro: Change rust Ident definition

Change rust interface Ident definition to match C++ struct definition.
This structure now uses an FFIString instead of raw pointers.

libgrust/ChangeLog:

* libproc_macro/rust/bridge/ident.rs: Change raw
pointer string with an FFIString.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: libproc_macro: Change Ident structure
Pierre-Emmanuel Patry [Wed, 19 Jul 2023 09:50:23 +0000 (11:50 +0200)] 
gccrs: libproc_macro: Change Ident structure

Use FFIString in Ident structure rather that a raw pointer and a
length, this will reduce the size of the code dealing with raw
pointers. Which should prevent some error.

gcc/rust/ChangeLog:

* util/rust-token-converter.cc (from_ident): Adapt code to new
constructor.

libgrust/ChangeLog:

* libproc_macro/ident.cc (Ident__new): Constructor
accepts an FFIString now.
(Ident__new_raw): Likewise.
(Ident::clone): Internal members change means clone also change.
(Ident::make_ident): Change constructor call.
(Ident::drop): Add call to FFIString::clone.
* libproc_macro/ident.h (struct Ident): Remove raw
pointer and length, add an FFIString inside instead.
(Ident__new): Change constructor.
(Ident__new_raw): Change constructor.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: proc_macro: Add from string implementation
Pierre-Emmanuel Patry [Tue, 11 Jul 2023 12:41:33 +0000 (14:41 +0200)] 
gccrs: proc_macro: Add from string implementation

Add a callback registration function into the proc macro library so the
compiler can register it's own lexing/parsing functions on load.

gcc/rust/ChangeLog:

* expand/rust-proc-macro.cc (tokenstream_from_string): Add a
function that creates a tokenstream from a given string.
(load_macros_array): Add call to registration function.

libgrust/ChangeLog:

* libproc_macro/proc_macro.cc (proc_macro_register_from_str):
Add registration function.
* libproc_macro/proc_macro.h (proc_macro_register_from_str):
Add registration function prototype.
* libproc_macro/tokenstream.cc (TokenStream::make_tokenstream):
Add a new constructor from a string that uses the registered
callback.
(TokenStream__from_string): Add call to new constructor.
* libproc_macro/tokenstream.h: Add registration
declaration.
* libproc_macro/registration.h: New file.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: cli: Add frust-type option
Pierre-Emmanuel Patry [Mon, 17 Jul 2023 11:09:36 +0000 (13:09 +0200)] 
gccrs: cli: Add frust-type option

Add a new option to crab1 cli to accept crate type. This version of the
argument only accept a single crate type. Rustc accepts a comma
separated list of crate types but this might require a litle more work
for gcc.

gcc/rust/ChangeLog:

* lang.opt: Add option
* rust-session-manager.cc: Add option registration in session
target options.
* rust-session-manager.h (struct CompileOptions): Add new getter
for proc macros instead of a boolean.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: nr2.0: Add `ForeverStack` data structure.
Arthur Cohen [Fri, 23 Jun 2023 14:16:34 +0000 (16:16 +0200)] 
gccrs: nr2.0: Add `ForeverStack` data structure.

This data structure replaces our existing scopes and allows for multiple
name resolution passes to insert definitions or look up names at different
stages of the pipeline. The documentation goes into detail about how the
data structure works, and how the source's hierarchy is preserved
throughout the pipeline.

The class is templated to enforce specific behavior based on the namespace
the scope map targets.

gcc/rust/ChangeLog:

* resolve/rust-forever-stack.h: New file.
* resolve/rust-forever-stack.hxx: New file.

18 months agogccrs: rework the HIR dump pass
Marc Poulhiès [Mon, 3 Jul 2023 19:04:45 +0000 (21:04 +0200)] 
gccrs: rework the HIR dump pass

Nearly complete rewrite of the HIR dump pass.

fixes #693

gcc/rust/ChangeLog:

* hir/rust-hir-dump.cc (convert_param_kind_to_str): New.
(convert_new_bind_type_to_str): New.
(convert_mut_to_str): New.
(Dump::go): New.
(Dump::put): New.
(Dump::begin): New.
(Dump::end): New.
(Dump::begin_field): New.
(Dump::end_field): New.
(Dump::put_field): New.
(Dump::visit_field): New.
(Dump::visit): Refactor.
(Dump::visit_collection): New.
(Dump::do_traititem): New.
(Dump::do_vis_item): New.
(Dump::do_functionparam): New.
(Dump::do_pathpattern): New.
(Dump::do_structexprstruct): New.
(Dump::do_expr): New.
(Dump::do_pathexpr): New.
(Dump::do_typepathsegment): New.
(Dump::do_typepathfunction): New.
(Dump::do_qualifiedpathtype): New.
(Dump::do_operatorexpr): New.
(Dump::do_mappings): New.
(Dump::do_inner_attrs): New.
(Dump::do_outer_attrs): New.
(Dump::do_baseloopexpr): New.
(Dump::do_ifletexpr): New.
(Dump::do_struct): New.
(Dump::do_enumitem): New.
(Dump::do_traitfunctiondecl): New.
(Dump::do_externalitem): New.
(Dump::do_namefunctionparam): New.
(Dump::do_stmt): New.
(Dump::do_type): New.
(Dump::do_item): New.
(Dump::do_tuplefield): New.
(Dump::do_structfield): New.
(Dump::do_genericargs): New.
(Dump::do_maybenamedparam): New.
* hir/rust-hir-dump.h: Refactor.
* hir/tree/rust-hir-item.h (enum_to_str): New.
* hir/tree/rust-hir-type.h (enum_to_str): New.
* hir/tree/rust-hir.cc (enum_to_str): New.
* util/rust-common.h (enum_to_str): New.

Signed-off-by: Marc Poulhiès <dkm@kataplop.net>
18 months agogccrs: nr2.0: Add basic Rib class
Arthur Cohen [Fri, 23 Jun 2023 14:15:29 +0000 (16:15 +0200)] 
gccrs: nr2.0: Add basic Rib class

This class adds a basic Rib class for the new name resolution algorithm.
It uses `optional` and `expected` return types in order to try and
improve error handling in these new passes.

gcc/rust/ChangeLog:

* Make-lang.in: Add `rust-rib.cc` object.
* resolve/rust-rib.cc: New file.
* resolve/rust-rib.h: New file.

Co-authored-by: Matthew Jasper <mjjasper1@gmail.com>
18 months agogccrs: Replace some more usages of Location with location_t
Owen Avery [Mon, 10 Jul 2023 19:56:31 +0000 (15:56 -0400)] 
gccrs: Replace some more usages of Location with location_t

gcc/rust/ChangeLog:

* ast/rust-ast.h: Replace Location with location_t.
* ast/rust-expr.h: Likewise.
* ast/rust-item.h: Likewise.
* ast/rust-macro.h: Likewise.
* ast/rust-path.h: Likewise.
* ast/rust-pattern.h: Likewise.
* ast/rust-stmt.h: Likewise.
* ast/rust-type.h: Likewise.
* hir/rust-ast-lower-base.h: Likewise.
* hir/tree/rust-hir-expr.h: Likewise.
* hir/tree/rust-hir-item.h: Likewise.
* hir/tree/rust-hir-path.h: Likewise.
* hir/tree/rust-hir-pattern.h: Likewise.
* hir/tree/rust-hir-stmt.h: Likewise.
* hir/tree/rust-hir-type.h: Likewise.
* hir/tree/rust-hir.h: Likewise.
* lex/rust-token.h: Likewise.
* resolve/rust-ast-resolve-pattern.h: Likewise.
* typecheck/rust-hir-trait-reference.h: Likewise.
* typecheck/rust-tyty-bounds.h: Likewise.
* typecheck/rust-tyty-call.h: Likewise.
* typecheck/rust-tyty-subst.h: Likewise.
* typecheck/rust-tyty-util.h: Likewise.
* typecheck/rust-tyty.h: Likewise.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
18 months agogccrs: Replace some usages of Location with location_t
Owen Avery [Mon, 10 Jul 2023 19:42:49 +0000 (15:42 -0400)] 
gccrs: Replace some usages of Location with location_t

gcc/rust/ChangeLog:

* ast/rust-ast-collector.cc: Replace Location with location_t.
* ast/rust-ast.cc: Likewise.
* ast/rust-ast.h: Likewise.
* ast/rust-expr.h: Likewise.
* ast/rust-item.h: Likewise.
* ast/rust-macro.h: Likewise.
* ast/rust-path.cc: Likewise.
* ast/rust-path.h: Likewise.
* ast/rust-pattern.h: Likewise.
* ast/rust-stmt.h: Likewise.
* ast/rust-type.h: Likewise.
* backend/rust-compile-base.cc: Likewise.
* backend/rust-compile-base.h: Likewise.
* backend/rust-compile-block.cc: Likewise.
* backend/rust-compile-expr.cc: Likewise.
* backend/rust-compile-expr.h: Likewise.
* backend/rust-compile-fnparam.cc: Likewise.
* backend/rust-compile-fnparam.h: Likewise.
* backend/rust-compile-intrinsic.cc: Likewise.
* backend/rust-compile-pattern.cc: Likewise.
* backend/rust-compile-resolve-path.h: Likewise.
* backend/rust-compile.cc: Likewise.
* checks/errors/rust-const-checker.cc: Likewise.
* checks/errors/rust-const-checker.h: Likewise.
* checks/errors/rust-unsafe-checker.cc: Likewise.
* checks/errors/rust-unsafe-checker.h: Likewise.
* expand/rust-macro-builtins.cc: Likewise.
* expand/rust-macro-expand.h: Likewise.
* hir/rust-ast-lower-base.h: Likewise.
* hir/rust-ast-lower-implitem.h: Likewise.
* hir/rust-ast-lower-item.cc: Likewise.
* hir/tree/rust-hir-expr.h: Likewise.
* hir/tree/rust-hir-item.h: Likewise.
* hir/tree/rust-hir-path.h: Likewise.
* hir/tree/rust-hir-pattern.h: Likewise.
* hir/tree/rust-hir-stmt.h: Likewise.
* hir/tree/rust-hir-type.h: Likewise.
* hir/tree/rust-hir.cc: Likewise.
* hir/tree/rust-hir.h: Likewise.
* lex/rust-token.h: Likewise.
* metadata/rust-extern-crate.cc: Likewise.
* metadata/rust-extern-crate.h: Likewise.
* parse/rust-parse-impl.h: Likewise.
* parse/rust-parse.h: Likewise.
* resolve/rust-ast-resolve-expr.cc: Likewise.
* resolve/rust-ast-resolve-implitem.h: 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: Likewise.
* resolve/rust-name-resolver.h: Likewise.
* rust-diagnostics.cc: Likewise.
* rust-diagnostics.h: Likewise.
* rust-gcc.cc: Likewise.
* rust-session-manager.cc: Likewise.
* rust-session-manager.h: Likewise.
* typecheck/rust-casts.cc: Likewise.
* typecheck/rust-casts.h: Likewise.
* typecheck/rust-coercion.cc: Likewise.
* typecheck/rust-coercion.h: Likewise.
* typecheck/rust-hir-path-probe.cc: Likewise.
* typecheck/rust-hir-path-probe.h: Likewise.
* typecheck/rust-hir-trait-reference.cc: Likewise.
* typecheck/rust-hir-trait-reference.h: Likewise.
* typecheck/rust-hir-trait-resolve.cc: Likewise.
* typecheck/rust-hir-type-check-base.cc: Likewise.
* typecheck/rust-hir-type-check-base.h: Likewise.
* typecheck/rust-hir-type-check-item.cc: Likewise.
* typecheck/rust-hir-type-check-item.h: Likewise.
* typecheck/rust-hir-type-check-path.cc: Likewise.
* typecheck/rust-hir-type-check-pattern.cc: Likewise.
* typecheck/rust-hir-type-check-pattern.h: Likewise.
* typecheck/rust-hir-type-check-type.cc: Likewise.
* typecheck/rust-hir-type-check-type.h: Likewise.
* typecheck/rust-hir-type-check.cc: Likewise.
* typecheck/rust-hir-type-check.h: Likewise.
* typecheck/rust-substitution-mapper.cc: Likewise.
* typecheck/rust-substitution-mapper.h: Likewise.
* typecheck/rust-type-util.cc: Likewise.
* typecheck/rust-typecheck-context.cc: Likewise.
* typecheck/rust-tyty-bounds.cc: Likewise.
* typecheck/rust-tyty-call.h: Likewise.
* typecheck/rust-tyty-subst.cc: Likewise.
* typecheck/rust-tyty-subst.h: Likewise.
* typecheck/rust-tyty-util.cc: Likewise.
* typecheck/rust-tyty-util.h: Likewise.
* typecheck/rust-tyty.cc: Likewise.
* typecheck/rust-tyty.h: Likewise.
* typecheck/rust-unify.cc: Likewise.
* typecheck/rust-unify.h: Likewise.
* util/rust-hir-map.cc: Likewise.
* util/rust-hir-map.h: Likewise.
* util/rust-identifier.h: Likewise.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
18 months agogccrs: Move some Gcc_backend method definitions out of class declaration
Owen Avery [Fri, 14 Jul 2023 19:27:54 +0000 (15:27 -0400)] 
gccrs: Move some Gcc_backend method definitions out of class declaration

gcc/rust/ChangeLog:

* rust-gcc.cc
(Gcc_backend::debug): Move out of class declaration.
(Gcc_backend::get_identifier_node): Likewise.
(Gcc_backend::wchar_type): Likewise.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
18 months agogccrs: [E0423] expected function, tuple struct or tuple variant, found struct
Muhammad Mahad [Mon, 17 Jul 2023 07:32:17 +0000 (12:32 +0500)] 
gccrs: [E0423] expected function, tuple struct or tuple variant, found struct

Give error when an identifier was used like a function
name or a value was expected and the identifier exists
but it belongs to a different namespace.

gcc/rust/ChangeLog:

* typecheck/rust-tyty-call.cc (TypeCheckCallExpr::visit):
called error function.

gcc/testsuite/ChangeLog:

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

Signed-off-by: Muhammad Mahad <mahadtxt@gmail.com>
18 months agogccrs: Remove Linemap::predeclared_location
Owen Avery [Wed, 12 Jul 2023 17:36:15 +0000 (13:36 -0400)] 
gccrs: Remove Linemap::predeclared_location

gcc/rust/ChangeLog:

* rust-linemap.h (Linemap::predeclared_location): Remove.
* backend/rust-compile-type.cc:
Replace Linemap::predeclared_location with BUILTINS_LOCATION.
* resolve/rust-name-resolver.cc: Likewise.
* typecheck/rust-hir-type-check-type.cc: Likewise.
* typecheck/rust-tyty.cc: Likewise.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
18 months agogccrs: Add include guard for rust-gcc.h
Owen Avery [Fri, 14 Jul 2023 19:32:19 +0000 (15:32 -0400)] 
gccrs: Add include guard for rust-gcc.h

gcc/rust/ChangeLog:

* rust-gcc.h: Add include guard.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
18 months agogccrs: rust-unreachable: Add specific behavior for rust_unreachable
Arthur Cohen [Sun, 9 Jul 2023 11:44:52 +0000 (13:44 +0200)] 
gccrs: rust-unreachable: Add specific behavior for rust_unreachable

As discussed during the community call, rust_unreachable() should
always trigger an internal compiler error and should not offer
the behavior of __builtin_unreachable when asserts are disabled, unlike
gcc_unreachable().

gcc/rust/ChangeLog:

* rust-system.h (rust_unreachable): Change definition to fancy_abort
* ast/rust-ast-collector.cc (TokenCollector::visit): Use rust_unreachable
instead of gcc_unreachable.
(get_delimiters): Likewise.
* ast/rust-ast-dump.h: Likewise.
* ast/rust-ast-formatting.cc (get_string_in_delims): Likewise.
(get_mode_dump_desc): Likewise.
* ast/rust-ast.cc (Visibility::as_string): Likewise.
(UseTreeGlob::as_string): Likewise.
* ast/rust-ast.h: Likewise.
* ast/rust-macro.h: Likewise.
* ast/rust-path.h: Likewise.
* backend/rust-compile-expr.cc (sort_tuple_patterns): Likewise.
(CompileExpr::visit): Likewise.
(CompileExpr::generate_closure_fntype): Likewise.
* backend/rust-compile-intrinsic.cc (op_with_overflow_inner): Likewise.
* backend/rust-compile-pattern.cc (CompilePatternBindings::visit): Likewise.
(CompilePatternLet::visit): Likewise.
* backend/rust-constexpr.cc (base_field_constructor_elt): Likewise.
(eval_array_reference): Likewise.
(label_matches): Likewise.
(eval_store_expression): Likewise.
(eval_call_expression): Likewise.
(build_data_member_initialization): Likewise.
(array_index_cmp): Likewise.
(get_array_or_vector_nelts): Likewise.
(eval_bit_field_ref): Likewise.
(eval_loop_expr): Likewise.
(potential_constant_expression_1): Likewise.
* backend/rust-mangle.cc (v0_simple_type_prefix): Likewise.
(v0_type_prefix): Likewise.
(v0_mangle_item): Likewise.
(Mangler::mangle_item): Likewise.
* backend/rust-tree.cc (convert_to_void): Likewise.
(type_memfn_quals): Likewise.
(rs_tree_equal): Likewise.
(fold_offsetof): Likewise.
(fold_builtin_source_location): Likewise.
(lvalue_error): Likewise.
* backend/rust-tree.h (struct named_decl_hash): Likewise.
(struct named_label_hash): Likewise.
* checks/errors/privacy/rust-visibility-resolver.cc
(VisibilityResolver::resolve_visibility): Likewise.
(VisibilityResolver::visit): Likewise.
* checks/errors/rust-const-checker.cc (ConstChecker::ctx_to_str): Likewise.
* checks/errors/rust-feature.cc (Feature::create): Likewise.
* expand/rust-expand-visitor.cc (get_traits_to_derive): Likewise.
(derive_item): Likewise.
(expand_item_attribute): Likewise.
(expand_stmt_attribute): Likewise.
* expand/rust-macro-expand.cc (MacroExpander::match_matcher): Likewise.
(MacroExpander::match_repetition): Likewise.
(transcribe_context): Likewise.
(MacroExpander::import_proc_macros): Likewise.
(MacroExpander::parse_proc_macro_output): Likewise.
* expand/rust-macro-expand.h: Likewise.
* expand/rust-macro-invoc-lexer.h: Likewise.
* expand/rust-macro-substitute-ctx.cc (SubstituteCtx::substitute_token): Likewise.
* expand/rust-proc-macro-invoc-lexer.h: Likewise.
* expand/rust-proc-macro.cc (load_macros): Likewise.
* hir/rust-ast-lower-base.cc (ASTLoweringBase::lower_generic_args): Likewise.
(ASTLoweringBase::lower_literal): Likewise.
* hir/rust-ast-lower-expr.cc (ASTLoweringExpr::visit): Likewise.
* hir/rust-ast-lower-pattern.cc (ASTLoweringPattern::visit): Likewise.
* hir/rust-ast-lower-type.cc (ASTLoweringType::visit): Likewise.
* hir/rust-hir-dump.cc (Dump::visit): Likewise.
* hir/tree/rust-hir.cc (get_string_in_delims): Likewise.
(Visibility::as_string): Likewise.
(UseTreeGlob::as_string): Likewise.
(CompoundAssignmentExpr::as_string): Likewise.
(ArithmeticOrLogicalExpr::as_string): Likewise.
* lex/rust-lex.cc (Lexer::parse_byte_string): Likewise.
(Lexer::parse_string): Likewise.
* lex/rust-token.cc (RS_TOKEN): Likewise.
* parse/rust-parse-impl.h (Parser::parse_simple_path_segment): Likewise.
(Parser::parse_path_ident_segment): Likewise.
(Parser::parse_attr_input): Likewise.
(Parser::parse_inherent_impl_item): Likewise.
(Parser::parse_trait_impl_item): Likewise.
(Parser::parse_type_path_segment): Likewise.
(Parser::parse_reference_type): Likewise.
(get_lbp_for_comparison_expr): Likewise.
* parse/rust-parse.cc (peculiar_fragment_match_compatible): Likewise.
* resolve/rust-ast-resolve-path.cc (ResolvePath::resolve_path): Likewise.
* resolve/rust-ast-resolve-pattern.cc (PatternDeclaration::visit): Likewise.
* resolve/rust-ast-resolve-type.cc (ResolveRelativeTypePath::go): Likewise.
(ResolveTypeToCanonicalPath::visit): Likewise.
(ResolveGenericArgs::resolve_disambiguated_generic): Likewise.
* rust-gcc.cc (operator_to_tree_code): Likewise.
(fetch_overflow_builtins): Likewise.
(Gcc_backend::non_zero_size_type): Likewise.
(Gcc_backend::convert_tree): Likewise.
* rust-lang.cc (grs_langhook_type_for_mode): Likewise.
(grs_langhook_global_bindings_p): Likewise.
(grs_langhook_pushdecl): Likewise.
(grs_langhook_getdecls): Likewise.
(convert): Likewise.
* typecheck/rust-autoderef.h: Likewise.
* typecheck/rust-hir-path-probe.cc: Likewise.
* typecheck/rust-hir-trait-reference.cc (TraitItemReference::get_tyty): Likewise.
* typecheck/rust-hir-type-check-base.cc (TypeCheckBase::resolve_literal): Likewise.
* typecheck/rust-hir-type-check-expr.cc: Likewise.
* typecheck/rust-hir-type-check-expr.h: Likewise.
* typecheck/rust-hir-type-check-implitem.cc (TypeCheckImplItem::visit): Likewise.
* typecheck/rust-hir-type-check-pattern.cc (TypeCheckPattern::visit): Likewise.
* typecheck/rust-hir-type-check-stmt.h: Likewise.
* typecheck/rust-hir-type-check.cc (TraitItemReference::get_type_from_fn): Likewise.
* typecheck/rust-substitution-mapper.h: Likewise.
* typecheck/rust-typecheck-context.cc (TypeCheckContextItem::get_context_type): Likewise.
* typecheck/rust-tyty-call.h: Likewise.
* typecheck/rust-tyty.cc (TypeKindFormat::to_string): Likewise.
(BaseType::monomorphized_clone): Likewise.
(VariantDef::variant_type_string): Likewise.
(ClosureType::handle_substitions): Likewise.
(IntType::as_string): Likewise.
(UintType::as_string): Likewise.
(FloatType::as_string): Likewise.
* typecheck/rust-unify.cc (UnifyRules::expect_projection): Likewise.
* util/rust-token-converter.cc (convert): Likewise.
(from_literal): Likewise.
(from_group): Likewise.
(from_tokentree): Likewise.

18 months agogccrs: [E0658] Use of unstable feature
Muhammad Mahad [Tue, 11 Jul 2023 09:50:39 +0000 (14:50 +0500)] 
gccrs: [E0658] Use of unstable feature

gcc/rust/ChangeLog:

* checks/errors/rust-feature-gate.cc (FeatureGate::gate):
called error function.

gcc/testsuite/ChangeLog:

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

Signed-off-by: Muhammad Mahad <mahadtxt@gmail.com>
18 months agogccrs: [E0093] Declaration of unknown intrinsic function
Muhammad Mahad [Tue, 11 Jul 2023 09:27:53 +0000 (14:27 +0500)] 
gccrs: [E0093] Declaration of unknown intrinsic function

Refactored error message similiar to rustc.

gcc/rust/ChangeLog:

* backend/rust-compile-intrinsic.cc (Intrinsics::compile):
called error function.

gcc/testsuite/ChangeLog:

* rust/compile/torture/intrinsics-3.rs: Updated comment to pass the test case.

Signed-off-by: Muhammad Mahad <mahadtxt@gmail.com>
18 months agogccrs: [E0133] Use of unsafe code outside of unsafe function or block
Muhammad Mahad [Thu, 13 Jul 2023 08:57:37 +0000 (13:57 +0500)] 
gccrs: [E0133] Use of unsafe code outside of unsafe function or block

gcc/rust/ChangeLog:

* checks/errors/rust-unsafe-checker.cc (check_unsafe_call):
called error function.

Signed-off-by: Muhammad Mahad <mahadtxt@gmail.com>
18 months agogccrs: Remove RichLocation typedef
Owen Avery [Mon, 10 Jul 2023 18:05:09 +0000 (14:05 -0400)] 
gccrs: Remove RichLocation typedef

gcc/rust/ChangeLog:

* rust-location.h
(typedef RichLocation): Remove.
* expand/rust-macro-expand.cc: Replace RichLocation with rich_location.
* hir/rust-ast-lower-base.cc: Likewise.
* resolve/rust-ast-resolve-implitem.h: Likewise.
* resolve/rust-ast-resolve-stmt.h: Likewise.
* resolve/rust-ast-resolve-toplevel.h: Likewise.
* rust-diagnostics.cc: Likewise.
* rust-diagnostics.h: Likewise.
* rust-session-manager.cc: Likewise.
* typecheck/rust-casts.cc: Likewise.
* typecheck/rust-coercion.cc: Likewise.
* typecheck/rust-hir-inherent-impl-overlap.h: Likewise.
* typecheck/rust-hir-path-probe.h: Likewise.
* typecheck/rust-hir-trait-reference.cc: Likewise.
* typecheck/rust-hir-type-check-expr.cc: Likewise.
* typecheck/rust-hir-type-check-implitem.cc: Likewise.
* typecheck/rust-hir-type-check-item.cc: Likewise.
* typecheck/rust-hir-type-check-pattern.cc: Likewise.
* typecheck/rust-tyty-cmp.h: Likewise.
* typecheck/rust-tyty-subst.cc: Likewise.
* typecheck/rust-tyty.cc: Likewise.
* typecheck/rust-unify.cc: Likewise.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
18 months agogccrs: Remove Linemap::start_line
Owen Avery [Mon, 10 Jul 2023 00:46:03 +0000 (20:46 -0400)] 
gccrs: Remove Linemap::start_line

gcc/rust/ChangeLog:

* lex/rust-lex.cc
(Lexer::start_line): Use linemap_line_start.
* rust-linemap.cc
(Linemap::start_line): Remove.
* rust-linemap.h
(Linemap::start_line): Remove.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
18 months agogccrs: Change class RichLocation into typedef
Owen Avery [Mon, 10 Jul 2023 15:42:12 +0000 (11:42 -0400)] 
gccrs: Change class RichLocation into typedef

gcc/rust/ChangeLog:

* rust-linemap.cc
(RichLocation::RichLocation): Remove.
(RichLocation::~RichLocation): Remove.
(RichLocation::add_range): Remove.
(RichLocation::add_fixit_insert_before): Remove.
(RichLocation::add_fixit_insert_after): Remove.
* rust-location.h
(class RichLocation): Remove.
* rust-diagnostics.cc
(rust_be_error_at): Remove RichLocation::get invocation.
* expand/rust-macro-expand.cc: Fix RichLocation constructor.
* hir/rust-ast-lower-base.cc: Likewise.
* resolve/rust-ast-resolve-implitem.h: Likewise.
* resolve/rust-ast-resolve-stmt.h: Likewise.
* resolve/rust-ast-resolve-toplevel.h: Likewise.
* rust-session-manager.cc: Likewise.
* typecheck/rust-casts.cc: Likewise.
* typecheck/rust-coercion.cc: Likewise.
* typecheck/rust-hir-inherent-impl-overlap.h: Likewise.
* typecheck/rust-hir-path-probe.h: Likewise.
* typecheck/rust-hir-trait-reference.cc: Likewise.
* typecheck/rust-hir-type-check-expr.cc: Likewise.
* typecheck/rust-hir-type-check-implitem.cc: Likewise.
* typecheck/rust-hir-type-check-item.cc: Likewise.
* typecheck/rust-hir-type-check-pattern.cc: Likewise.
* typecheck/rust-tyty-cmp.h: Likewise.
* typecheck/rust-tyty-subst.cc: Likewise.
* typecheck/rust-tyty.cc: Likewise.
* typecheck/rust-unify.cc: Likewise.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
18 months agogccrs: Remove Linemap::get_location
Owen Avery [Sun, 9 Jul 2023 03:51:51 +0000 (23:51 -0400)] 
gccrs: Remove Linemap::get_location

gcc/rust/ChangeLog:

* lex/rust-lex.cc
(Lexer::get_current_location): Use linemap_position_for_column.
* rust-session-manager.cc
(Session::handle_crate_name): Likewise.
* rust-linemap.cc
(Linemap::get_location): Remove.
* rust-linemap.h
(Linemap::get_location): Likewise.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
18 months agogccrs: dump: Output escaped character values
Pierre-Emmanuel Patry [Mon, 10 Jul 2023 11:47:37 +0000 (13:47 +0200)] 
gccrs: dump: Output escaped character values

Output escaped character values instead of their raw values in string.

gcc/rust/ChangeLog:

* lex/rust-token.cc (escape_special_chars): Add a function that
escape a given string.
(Token::as_string): Add call to escape function for string/char
representations.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: minor HIR cleanup
Marc Poulhiès [Wed, 12 Jul 2023 07:48:31 +0000 (09:48 +0200)] 
gccrs: minor HIR cleanup

Remove more rust_assert in accessors.

gcc/rust/ChangeLog:

* hir/tree/rust-hir-type.h (MaybeNamedParam::get_type): Remove
rust_assert.
(BareFunctionType::get_return_type): Likewise.

Signed-off-by: Marc Poulhiès <dkm@kataplop.net>
18 months agogccrs: remove braces around scalar initializers
Pierre-Emmanuel Patry [Tue, 11 Jul 2023 15:49:31 +0000 (17:49 +0200)] 
gccrs: remove braces around scalar initializers

Remove useless braces around scalar initializers. This will also remove
some warning emitted by the compiler and avoid cluttering it's output.

gcc/rust/ChangeLog:

* backend/rust-compile-intrinsic.cc (offset_handler): Remove
braces.
(sizeof_handler): Likewise.
(transmute_handler): Likewise.
(rotate_handler): Likewise.
(wrapping_op_handler_inner): Likewise.
(op_with_overflow_inner): Likewise.
(atomic_load_handler_inner): Likewise.
(unchecked_op_inner): Likewise.
(uninit_handler): Likewise.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: Add missing virtual destructor to interfaces
Pierre-Emmanuel Patry [Tue, 11 Jul 2023 15:45:03 +0000 (17:45 +0200)] 
gccrs: Add missing virtual destructor to interfaces

Those interfaces missed a virtual destructor. This lead to several
warning.

gcc/rust/ChangeLog:

* ast/rust-ast.h: Add virtual destructor.
* expand/rust-macro-expand.h: Likewise.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: Change specifier of some forward declaration
Pierre-Emmanuel Patry [Tue, 11 Jul 2023 14:46:25 +0000 (16:46 +0200)] 
gccrs: Change specifier of some forward declaration

Change storage specifier of some forward declaration to satisfy compiler
warning.

gcc/rust/ChangeLog:

* hir/tree/rust-hir-full-decls.h (struct Crate): Change to
class.
(class Crate): Likewise.
(struct StructField): Likewise.
(class StructField): Likewise.
(struct TupleField): Likewise.
(class TupleField): Likewise.
(struct TraitFunctionDecl): Likewise.
(class TraitFunctionDecl): Likewise.
* rust-session-manager.h (struct Crate): Likewise.
(class Crate): Likewise.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: Remove unnecessary usage of Location copy constructor
Owen Avery [Mon, 10 Jul 2023 18:43:18 +0000 (14:43 -0400)] 
gccrs: Remove unnecessary usage of Location copy constructor

gcc/rust/ChangeLog:

* ast/rust-expr.h
(MetaItemPathLit::get_locus): Remove copy construction.
* backend/rust-constexpr.cc
(eval_constant_expression): Likewise.
(is_valid_constexpr_fn): Likewise.
* util/rust-token-converter.cc
(convert): Likewise.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
18 months agogccrs: Merge Linemap::to_string into Linemap::location_to_string
Owen Avery [Sun, 9 Jul 2023 03:20:01 +0000 (23:20 -0400)] 
gccrs: Merge Linemap::to_string into Linemap::location_to_string

gcc/rust/ChangeLog:

* lex/rust-lex.cc
(Lexer::dump_and_skip): Use location_to_string.
* rust-linemap.cc
(Linemap::to_string): Move to...
(Linemap::location_to_string): ... here.
* rust-linemap.h
(Linemap::to_string): Remove.
(Linemap::location_to_string): Remove definition.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
18 months agogccrs: minor HIR cleanup
Marc Poulhiès [Mon, 10 Jul 2023 18:24:56 +0000 (20:24 +0200)] 
gccrs: minor HIR cleanup

Add one more accessor and remove some rust_assert() in accessors for unique_ptr&.

gcc/rust/ChangeLog:

* hir/tree/rust-hir-expr.h (TypeCastExpr::get_casted_expr): Remove
assert in accessor.
(TypeCastExpr::get_type_to_convert_to): Likewise.
(CompoundAssignmentExpr::get_left_expr): Likewise.
(CompoundAssignmentExpr::get_right_expr): Likewise.
(GroupedExpr::get_expr_in_parens): Likewise.
(TupleIndexExpr::get_tuple_expr): Likewise.
(FieldAccessExpr::get_receiver_expr): Likewise.
(ClosureParam::get_pattern): Likewise.
(ClosureParam::get_type): Likewise.
(ExprType::get_return_type): Likewise.
(IfLetExpr::get_scrutinee_expr): Likewise.
(MatchArm::get_guard_expr): Likewise.
(MatchExpr::get_scrutinee_expr): Likewise.
* hir/tree/rust-hir-item.h (TypeParam::get_type): Likewise.
(SelfParam::get_type): Likewise.
(Function::get_return_type): Likewise.
(TypeAlias::get_type_aliased): Likewise.
(StructField::get_field_type): Likewise.
(TraitFunctionDecl::get_block_expr): Likewise.
(ImplBlock::get_trait_ref): Likewise.
* hir/tree/rust-hir-path.h (ConstGenericArg::get_expression): New.
(TypePathFunction::get_return_type): Remove assert in accessor.
(QualifiedPathType::get_trait): Likewise.
* hir/tree/rust-hir-pattern.h (PatternType::get_lower_bound): Likewise.
(PatternType::get_upper_bound): Likewise.
(ReferencePattern::get_referenced_pattern): Likewise.
* hir/tree/rust-hir.h (ConstGenericParam::get_default_expression): Likewise.

Signed-off-by: Marc Poulhiès <dkm@kataplop.net>
18 months agogccrs: [E0124] field x is already declared in struct
Muhammad Mahad [Mon, 10 Jul 2023 12:26:45 +0000 (17:26 +0500)] 
gccrs: [E0124] field x is already declared in struct

Refactored error message for more
than one duplicate fields.

gcc/rust/ChangeLog:

* hir/rust-ast-lower-base.cc (struct_field_name_exists):
called error function.

gcc/testsuite/ChangeLog:

* rust/compile/bad_pub_enumitems.rs: changed comment to pass test cases.
* rust/compile/dup_fields.rs: likewise.
* rust/execute/same_field_name.rs: New test.

Signed-off-by: Muhammad Mahad <mahadtxt@gmail.com>
18 months agogccrs: Add rust_error_at accepting location_t and ErrorCode
Owen Avery [Mon, 10 Jul 2023 03:23:14 +0000 (23:23 -0400)] 
gccrs: Add rust_error_at accepting location_t and ErrorCode

gcc/rust/ChangeLog:

* rust-diagnostics.cc
(rust_be_error_at): Add function accepting location_t and ErrorCode.
(rust_error_at): Likewise.
* rust-diagnostics.h
(rust_error_at): Likewise.
(rust_be_error_at): Likewise.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
18 months agogccrs: Merge Gcc_linemap into Linemap
Owen Avery [Sun, 9 Jul 2023 02:28:30 +0000 (22:28 -0400)] 
gccrs: Merge Gcc_linemap into Linemap

gcc/rust/ChangeLog:

* rust-linemap.cc
(class Gcc_linemap): Remove.
(Gcc_linemap::start_file): Move to...
(Linemap::start_file): ... here.
(Gcc_linemap::to_string): Move to...
(Linemap::to_string): ... here.
(Gcc_linemap::stop): Move to...
(Linemap::stop): ... here.
(Gcc_linemap::start_line): Move to...
(Linemap::start_line): ... here.
(Gcc_linemap::get_location): Move to...
(Linemap::get_location): ... here.
(rust_get_linemap): Use Linemap.
* rust-linemap.h
(Linemap::in_file_): New field from Gcc_linemap.
(Linemap::Linemap): Initialize in_file_.
(Linemap::~Linemap): Make non-virtual.
(Linemap::start_file): Likewise.
(Linemap::start_line): Likewise.
(Linemap::get_location): Likewise.
(Linemap::stop): Likewise.
(Linemap::to_string): Likewise.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
18 months agogccrs: Remove Rust::Optional in favor of tl::optional
Arthur Cohen [Mon, 26 Jun 2023 12:47:06 +0000 (14:47 +0200)] 
gccrs: Remove Rust::Optional in favor of tl::optional

gcc/rust/ChangeLog:

* Make-lang.in: Remove rust-optional-test.cc's object file
* ast/rust-macro.h: Remove use of Rust::Optional
* backend/rust-compile-base.cc
(HIRCompileBase::resolve_method_address): Likewise.
* checks/errors/privacy/rust-privacy-reporter.cc
(PrivacyReporter::check_for_privacy_violation): Likewise.
(PrivacyReporter::visit): Likewise.
* checks/errors/privacy/rust-privacy-reporter.h: Likewise.
* checks/errors/rust-feature-gate.cc (FeatureGate::check): Likewise.
* checks/errors/rust-feature.cc (Feature::create): Likewise.
(Feature::as_name): Likewise.
* checks/errors/rust-feature.h: Likewise.
* expand/rust-macro-builtins.cc: Likewise.
* lex/rust-lex.cc (Lexer::Lexer): Likewise.
(Lexer::skip_token): Likewise.
(Lexer::dump_and_skip): Likewise.
* lex/rust-lex.h: Likewise.
* resolve/rust-ast-resolve-path.cc (ResolvePath::resolve_path): Likewise.
* resolve/rust-ast-resolve-type.cc (ResolveRelativeTypePath::go): Likewise.
* rust-lang.cc (run_rust_tests): Likewise.
* rust-session-manager.cc (Session::compile_crate): Likewise.
(TargetOptions::dump_target_options): Likewise.
* rust-session-manager.h (struct TargetOptions): Likewise.
* util/rust-hir-map.cc (Mappings::lookup_module_children): Likewise.
(Mappings::lookup_module_chidren_items): Likewise.
(Mappings::lookup_module_child): Likewise.
(Mappings::lookup_parent_module): Likewise.
* util/rust-hir-map.h (RUST_HIR_MAP_H): Likewise.
* util/rust-optional-test.cc: Removed.
* util/rust-optional.h: Removed.

18 months agogccrs: Replace Linemap::unknown_location with UNKNOWN_LOCATION
Owen Avery [Mon, 3 Jul 2023 17:48:45 +0000 (13:48 -0400)] 
gccrs: Replace Linemap::unknown_location with UNKNOWN_LOCATION

gcc/rust/ChangeLog:

* rust-linemap.h (Linemap::unknown_location): Remove.
* ast/rust-ast.cc:
Replace Linemap::unknown_location with UNKNOWN_LOCATION.
* ast/rust-path.cc: Likewise.
* hir/tree/rust-hir.cc: Likewise.
* metadata/rust-imports.cc: Likewise.
* parse/rust-parse-impl.h: Likewise.
* parse/rust-parse.h: Likewise.
* rust-backend.h: Likewise.
* rust-diagnostics.cc: Likewise.
* rust-session-manager.cc: Likewise.
* typecheck/rust-tyty.cc: Likewise.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
18 months agogccrs: [E0070] invalid left-hand side of assignment
Muhammad Mahad [Fri, 7 Jul 2023 10:10:46 +0000 (15:10 +0500)] 
gccrs: [E0070] invalid left-hand side of assignment

gcc/rust/ChangeLog:

* resolve/rust-ast-verify-assignee.h: called error function.

gcc/testsuite/ChangeLog:

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

Signed-off-by: Muhammad Mahad <mahadtxt@gmail.com>
18 months agogccrs: [E0061] Refactored argument mismatch error function
Muhammad Mahad [Thu, 6 Jul 2023 12:08:56 +0000 (17:08 +0500)] 
gccrs: [E0061] Refactored argument mismatch error function

Added Invalid number of arguments (argument mismatch)
was passed when calling a function - unexpected
number of arguments `x` expected `y` And Refactored
error into one function.

gcc/rust/ChangeLog:

* typecheck/rust-tyty-call.cc (emit_unexpected_argument_error):
Refactored invalid number of argument into one function.
(TypeCheckCallExpr::visit): called refactored function.
(TypeCheckMethodCallExpr::check): likewise.

gcc/testsuite/ChangeLog:

* rust/compile/func2.rs: updated comment to pass new test cases.
* rust/compile/tuple_struct2.rs: likewise.
* rust/compile/wrong_no_of_parameters.rs: New test.

Signed-off-by: Muhammad Mahad <mahadtxt@gmail.com>
18 months agogccrs: nr2.0: Add complex testcases
Arthur Cohen [Tue, 27 Jun 2023 13:56:04 +0000 (15:56 +0200)] 
gccrs: nr2.0: Add complex testcases

gcc/testsuite/ChangeLog:

* rust/compile/name_resolution1.rs: New test.
* rust/compile/name_resolution2.rs: New test.
* rust/compile/name_resolution3.rs: New test.
* rust/compile/name_resolution4.rs: New test.
* rust/compile/name_resolution5.rs: New test.

Co-authored-by: GuillaumeGomez <guillaume1.gomez@gmail.com>
18 months agogccrs: expected: Adapt type to GCC's requirements.
Arthur Cohen [Wed, 28 Jun 2023 14:21:05 +0000 (16:21 +0200)] 
gccrs: expected: Adapt type to GCC's requirements.

Disable exceptions and remove inclusion of poisoned headers.

gcc/rust/ChangeLog:

* util/expected.h: Adapt class to GCC requirements.

18 months agogccrs: util: Add tl::expected type
Arthur Cohen [Fri, 23 Jun 2023 14:37:21 +0000 (16:37 +0200)] 
gccrs: util: Add tl::expected type

Directly taken from https://github.com/TartanLlama/expected.

gcc/rust/ChangeLog:

* util/expected.h: New file.

18 months agogccrs: optional: Adapt class to GCC's standards.
Arthur Cohen [Wed, 28 Jun 2023 10:59:34 +0000 (12:59 +0200)] 
gccrs: optional: Adapt class to GCC's standards.

This commit removes the poisoned includes as well as the exception throwing
mechanism of the original class.

gcc/rust/ChangeLog:

* util/optional.h: Adapt for GCC.

18 months agogccrs: optional: Import tl's optional type
Arthur Cohen [Fri, 23 Jun 2023 14:37:16 +0000 (16:37 +0200)] 
gccrs: optional: Import tl's optional type

This is directly adapted from https://github.com/TartanLlama/optional.
This class is tested for C++11 and on GCC 4.8, which is our target mimimum
GCC version.

This optional class provides multiple advantages over our existing
implementation of Optional<T>:

- Easier API (no static constructors)
- Better method chaining (and_then, map...)
- Harsher semantics (no assign-through on Optional<T&>)

Over the std::optional type present in C++'s standard library, this type offers:

- Optional references without going through std::reference_wrapper
- Better method chaining

For these reasons, I am in favor of importing it directly rather than
adapt C++14's std::optional type to work with C++11 and GCC 4.8.

gcc/rust/ChangeLog:

* util/optional.h: New file.

18 months agogccrs: Replace value initialization of Location with UNDEF_LOCATION
Owen Avery [Mon, 3 Jul 2023 15:54:19 +0000 (11:54 -0400)] 
gccrs: Replace value initialization of Location with UNDEF_LOCATION

gcc/rust/ChangeLog:

* rust-location.h (UNDEF_LOCATION): New.
* ast/rust-ast-collector.cc: Replace Location () with UNDEF_LOCATION.
* ast/rust-ast-fragment.cc: Likewise.
* ast/rust-ast.h: Likewise.
* ast/rust-expr.h: Likewise.
* ast/rust-item.h: Likewise.
* ast/rust-macro.h: Likewise.
* ast/rust-path.h: Likewise.
* ast/rust-type.h: Likewise.
* backend/rust-compile-expr.cc: Likewise.
* backend/rust-compile-extern.h: Likewise.
* backend/rust-compile-implitem.h: Likewise.
* backend/rust-compile-intrinsic.cc: Likewise.
* backend/rust-compile-item.h: Likewise.
* backend/rust-compile.cc: Likewise.
* backend/rust-constexpr.cc: Likewise.
* expand/rust-expand-visitor.cc: Likewise.
* expand/rust-macro-expand.cc: Likewise.
* expand/rust-macro-expand.h: Likewise.
* expand/rust-macro-invoc-lexer.cc: Likewise.
* expand/rust-proc-macro-invoc-lexer.cc: Likewise.
* expand/rust-proc-macro.cc: Likewise.
* hir/tree/rust-hir-expr.h: Likewise.
* hir/tree/rust-hir-item.h: Likewise.
* hir/tree/rust-hir-path.h: Likewise.
* hir/tree/rust-hir-type.h: Likewise.
* hir/tree/rust-hir.h: Likewise.
* lex/rust-lex.cc: Likewise.
* metadata/rust-export-metadata.cc: Likewise.
* parse/rust-parse-impl.h: Likewise.
* resolve/rust-ast-resolve-item.cc: Likewise.
* resolve/rust-ast-resolve.cc: Likewise.
* rust-diagnostics.h: Likewise.
* rust-session-manager.cc: Likewise.
* typecheck/rust-autoderef.cc: Likewise.
* typecheck/rust-coercion.cc: Likewise.
* typecheck/rust-hir-dot-operator.cc: Likewise.
* typecheck/rust-hir-path-probe.cc: Likewise.
* typecheck/rust-hir-trait-reference.cc: Likewise.
* typecheck/rust-hir-trait-reference.h: Likewise.
* typecheck/rust-hir-type-check-expr.cc: Likewise.
* typecheck/rust-hir-type-check-implitem.cc: Likewise.
* typecheck/rust-hir-type-check-type.cc: Likewise.
* typecheck/rust-hir-type-check.cc: Likewise.
* typecheck/rust-tyty-bounds.cc: Likewise.
* typecheck/rust-tyty-subst.cc: Likewise.
* typecheck/rust-tyty.cc: Likewise.
* util/rust-hir-map.cc: Likewise.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
18 months agogccrs: collector: Fix abi output
Pierre-Emmanuel Patry [Wed, 28 Jun 2023 14:16:08 +0000 (16:16 +0200)] 
gccrs: collector: Fix abi output

Abi did output as several tokens instead of a fixed string.

gcc/rust/ChangeLog:

* ast/rust-ast-collector.cc (TokenCollector::visit): Fix abit
output format.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: collector: Fix remaining trait & extern issues
Pierre-Emmanuel Patry [Wed, 28 Jun 2023 13:54:12 +0000 (15:54 +0200)] 
gccrs: collector: Fix remaining trait & extern issues

Fix remaining failing tests with trait and extern. Outer attributes were
missing and the semicolon did output on macro invocations.

gcc/rust/ChangeLog:

* ast/rust-ast-collector.cc (TokenCollector::visit): Fix
external item trailing semicolon and outer attributes.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: collector: Output extern function attributes
Pierre-Emmanuel Patry [Wed, 28 Jun 2023 13:37:15 +0000 (15:37 +0200)] 
gccrs: collector: Output extern function attributes

Outer attributes on external functions did not output correctly.

gcc/rust/ChangeLog:

* ast/rust-ast-collector.cc (TokenCollector::visit): Output
outer attributes on external functions.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: collector: Fix method qualifier output
Pierre-Emmanuel Patry [Wed, 28 Jun 2023 13:32:23 +0000 (15:32 +0200)] 
gccrs: collector: Fix method qualifier output

Method qualifiers did not output correctly (no unsafe in the output).

gcc/rust/ChangeLog:

* ast/rust-ast-collector.cc (TokenCollector::visit): Fix method
qualifier output.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: collector: Add where clause to trait impl block
Pierre-Emmanuel Patry [Wed, 28 Jun 2023 13:25:06 +0000 (15:25 +0200)] 
gccrs: collector: Add where clause to trait impl block

Trait impl block were missing a where clause for their output.

gcc/rust/ChangeLog:

* ast/rust-ast-collector.cc (TokenCollector::visit): Add where
clause.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: collector: Output outer attributes on blockexpr
Pierre-Emmanuel Patry [Wed, 28 Jun 2023 13:19:51 +0000 (15:19 +0200)] 
gccrs: collector: Output outer attributes on blockexpr

Outer attributes on block expr did not output properly.

gcc/rust/ChangeLog:

* ast/rust-ast-collector.cc (TokenCollector::visit): Add outer
attributes to collector output.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: collector: Add variadics to collector output
Pierre-Emmanuel Patry [Wed, 28 Jun 2023 13:12:11 +0000 (15:12 +0200)] 
gccrs: collector: Add variadics to collector output

Variadics were missing from collector output for external functions.

gcc/rust/ChangeLog:

* ast/rust-ast-collector.cc (TokenCollector::visit): Add
variadics in collector output.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: collector: Add generics to external functions
Pierre-Emmanuel Patry [Wed, 28 Jun 2023 12:52:31 +0000 (14:52 +0200)] 
gccrs: collector: Add generics to external functions

Add generic to external functiond declaration collector output.

gcc/rust/ChangeLog:

* ast/rust-ast-collector.cc (TokenCollector::visit): Add
generics.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: collector: Fix missing trait generics
Pierre-Emmanuel Patry [Wed, 28 Jun 2023 12:42:18 +0000 (14:42 +0200)] 
gccrs: collector: Fix missing trait generics

Generics on the target structure did not correctly output.

gcc/rust/ChangeLog:

* ast/rust-ast-collector.cc (TokenCollector::visit): Fix generic
output.

gcc/testsuite/ChangeLog:

* rust/link/trait_import_0.rs: Mark test as xfail.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: collector: Reformat trait impl
Pierre-Emmanuel Patry [Wed, 28 Jun 2023 12:33:36 +0000 (14:33 +0200)] 
gccrs: collector: Reformat trait impl

Trait impl were not readable, hence the reformat.

gcc/rust/ChangeLog:

* ast/rust-ast-collector.cc (TokenCollector::visit): Reformat
trait impl block.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: collector: Add generic to inherent impl block
Pierre-Emmanuel Patry [Wed, 28 Jun 2023 12:23:56 +0000 (14:23 +0200)] 
gccrs: collector: Add generic to inherent impl block

Generic in inherent impl block were did not output at all.

gcc/rust/ChangeLog:

* ast/rust-ast-collector.cc (TokenCollector::visit): Output
generic in inherent impl.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: dump: Fix dollar spacing rule
Pierre-Emmanuel Patry [Wed, 28 Jun 2023 11:58:54 +0000 (13:58 +0200)] 
gccrs: dump: Fix dollar spacing rule

Space should be removed after the dollar sign, not before.

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::require_spacing): Change dollar
spacing rule.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: collector: Change match arm format
Pierre-Emmanuel Patry [Wed, 28 Jun 2023 11:12:07 +0000 (13:12 +0200)] 
gccrs: collector: Change match arm format

Match arm were not readable with previous format options.

gcc/rust/ChangeLog:

* ast/rust-ast-collector.cc (TokenCollector::visit): Change
formatting.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: collector: Fix trait impl block
Pierre-Emmanuel Patry [Wed, 28 Jun 2023 11:10:57 +0000 (13:10 +0200)] 
gccrs: collector: Fix trait impl block

Trait impl block did not output any generic declaration nor the trait
excalamation mark.

gcc/rust/ChangeLog:

* ast/rust-ast-collector.cc (TokenCollector::visit): Fix trait
impl block output.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: collector: Fix doubled generics
Pierre-Emmanuel Patry [Wed, 28 Jun 2023 10:43:49 +0000 (12:43 +0200)] 
gccrs: collector: Fix doubled generics

Generics were output two times and binding args were missing in
TypePathSegmentGeneric collection.

gcc/rust/ChangeLog:

* ast/rust-ast-collector.cc (TokenCollector::visit): Fix binding
args.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: collector: Fix output for function qualifiers
Pierre-Emmanuel Patry [Wed, 28 Jun 2023 09:44:04 +0000 (11:44 +0200)] 
gccrs: collector: Fix output for function qualifiers

Function qualifiers did not output properly.

gcc/rust/ChangeLog:

* ast/rust-ast-collector.cc (TokenCollector::visit): Output
function qualifiers after visibility.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: collector: Fix method self parameter
Pierre-Emmanuel Patry [Wed, 28 Jun 2023 09:30:57 +0000 (11:30 +0200)] 
gccrs: collector: Fix method self parameter

Fix visitor for self parameter in methods.

gcc/rust/ChangeLog:

* ast/rust-ast-collector.cc (TokenCollector::visit): Fix self
param output.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: dump: Fix spacing with dots and references
Pierre-Emmanuel Patry [Wed, 28 Jun 2023 09:13:15 +0000 (11:13 +0200)] 
gccrs: dump: Fix spacing with dots and references

A space was output around dots as well as after references, this made
things kinda horrible to look at and clearly not usual.

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::require_spacing): Add a rule to
remove spaces around dots and after references.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: collector: Fix some token collector
Pierre-Emmanuel Patry [Tue, 27 Jun 2023 14:55:18 +0000 (16:55 +0200)] 
gccrs: collector: Fix some token collector

Some ast subtrees where not correctly collected. Among those where macro
match repetition introducing empty tokens.

gcc/rust/ChangeLog:

* ast/rust-ast-collector.cc (TokenCollector::visit): Fix several
token collection rules.
* ast/rust-ast-dump.cc (Dump::require_spacing): Add spacing rule
for comma.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
18 months agogccrs: Create MacroInvocLexerBase
Owen Avery [Fri, 30 Jun 2023 01:23:03 +0000 (21:23 -0400)] 
gccrs: Create MacroInvocLexerBase

gcc/rust/ChangeLog:

* expand/rust-macro-invoc-lexer.h
(class MacroInvocLexerBase): New.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
18 months agogccrs: Reduce Linemap/Gcc_linemap abstraction further
Owen Avery [Mon, 3 Jul 2023 17:33:16 +0000 (13:33 -0400)] 
gccrs: Reduce Linemap/Gcc_linemap abstraction further

gcc/rust/ChangeLog:

* expand/rust-macro-builtins.cc
(source_relative_path): Use LOCATION_FILE.
(MacroBuiltin::file_handler): Likewise.
(MacroBuiltin::column_handler): Use LOCATION_COLUMN.
(MacroBuiltin::line_handler): Use LOCATION_LINE.
* rust-linemap.cc
(Gcc_linemap::location_file): Remove.
(Gcc_linemap::location_line): Remove.
(Gcc_linemap::location_column): Remove.
* rust-linemap.h
(Linemap::location_file): Remove.
(Linemap::location_line): Remove.
(Linemap::location_column): Remove.
(Linemap::location_to_file): Remove.
(Linemap::location_to_line): Remove.
(Linemap::location_to_column): Remove.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
18 months agogccrs: [E0425] Use of unresolved name
Muhammad Mahad [Thu, 6 Jul 2023 12:37:46 +0000 (17:37 +0500)] 
gccrs: [E0425] Use of unresolved name

Refactored error message similiar to
rustc.

gcc/rust/ChangeLog:

* resolve/rust-ast-resolve-expr.cc (ResolveExpr::visit):
called error function and changed error message
similiar to rustc.

gcc/testsuite/ChangeLog:

* rust/compile/break-rust2.rs: Updated comment to pass testcase.
* rust/compile/const_generics_3.rs: likewise.
* rust/compile/const_generics_4.rs: likewise.
* rust/compile/not_find_value_in_scope.rs: New test.

Signed-off-by: Muhammad Mahad <mahadtxt@gmail.com>
18 months agogccrs: Reduce Linemap/Gcc_linemap abstraction
Owen Avery [Mon, 3 Jul 2023 16:44:54 +0000 (12:44 -0400)] 
gccrs: Reduce Linemap/Gcc_linemap abstraction

This should help work towards the removal of Linemap/Gcc_linemap.

gcc/rust/ChangeLog:

* rust-linemap.cc
(Gcc_linemap::get_unknown_location): Remove.
(Gcc_linemap::get_predeclared_location): Remove.
(Gcc_linemap::is_predeclared): Remove.
(Gcc_linemap::is_unknown): Remove.
* rust-linemap.h
(Linemap::get_predeclared_location): Remove.
(Linemap::get_unknown_location): Remove.
(Linemap::is_predeclared): Remove.
(Linemap::is_unknown): Remove.
(Linemap::predeclared_location): Use BUILTINS_LOCATION.
(Linemap::unknown_location): Use UNKNOWN_LOCATION.
(Linemap::is_predeclared_location): Remove.
(Linemap::is_unknown_location): Remove.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
18 months agogccrs: [E0053] method 'x' has an incompatible type for trait 'y'
Muhammad Mahad [Wed, 5 Jul 2023 08:44:17 +0000 (13:44 +0500)] 
gccrs: [E0053] method 'x' has an incompatible type for trait 'y'

The parameters of any trait method must match between
a trait implementation and the trait definition

gcc/rust/ChangeLog:

* typecheck/rust-hir-type-check-implitem.cc (TypeCheckImplItemWithTrait::visit):
called error function

Signed-off-by: Muhammad Mahad <mahadtxt@gmail.com>
18 months agogccrs: [E0063] constructor is missing fields
Muhammad Mahad [Thu, 6 Jul 2023 13:26:26 +0000 (18:26 +0500)] 
gccrs: [E0063] constructor is missing fields

Added error code for Missing Field in
struct or struct-like enum variant.

gcc/rust/ChangeLog:

* typecheck/rust-hir-type-check-struct.cc (TypeCheckStructExpr::resolve):
called error function.

gcc/testsuite/ChangeLog:

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

Signed-off-by: Muhammad Mahad <mahadtxt@gmail.com>
18 months agogccrs: add utf-8 validation for input source
Raiki Tamura [Tue, 4 Jul 2023 09:21:48 +0000 (18:21 +0900)] 
gccrs: add utf-8 validation for input source

gcc/rust/ChangeLog:

* lex/rust-lex.cc (Lexer::input_source_is_valid_utf8): New method of `Lexer`.
* lex/rust-lex.h: Likewise.
* rust-session-manager.cc (Session::compile_crate): Add error.

gcc/testsuite/ChangeLog:

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

Signed-off-by: Raiki Tamura <tamaron1203@gmail.com>
18 months agogccrs: Ignore semicolon following a macro expansion in expression context
Owen Avery [Tue, 13 Jun 2023 04:25:03 +0000 (00:25 -0400)] 
gccrs: Ignore semicolon following a macro expansion in expression context

gcc/rust/ChangeLog:

* expand/rust-macro-expand.cc
(transcribe_expression): Skip trailing semicolon.

gcc/testsuite/ChangeLog:

* rust/compile/macro-issue2273.rs: New test.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
18 months agogccrs: gccrs:[E0046] Missing Items in Trait Implementation
Muhammad Mahad [Tue, 4 Jul 2023 11:48:20 +0000 (16:48 +0500)] 
gccrs: gccrs:[E0046] Missing Items in Trait Implementation

missing foo in implementation of trait 'Foo'

gcc/rust/ChangeLog:

* typecheck/rust-hir-type-check-item.cc: called error function.

Signed-off-by: Muhammad Mahad <mahadtxt@gmail.com>
18 months agogccrs: Add location info to `Rust::Identifier`
Raiki Tamura [Mon, 3 Jul 2023 07:34:59 +0000 (16:34 +0900)] 
gccrs: Add location info to `Rust::Identifier`

gcc/rust/ChangeLog:

* ast/rust-ast.h: Modify constructors of `Rust::Identifier`
* ast/rust-pattern.h: Likewise.
* hir/tree/rust-hir-item.h: Likewise.
* parse/rust-parse-impl.h (Parser::parse_macro_rules_def): Likewise.
(Parser::parse_decl_macro_def): Likewise.
(Parser::parse_macro_match_fragment): Likewise.
(Parser::parse_module): Likewise.
(Parser::parse_use_tree): Likewise.
(Parser::parse_function): Likewise.
(Parser::parse_type_param): Likewise.
(Parser::parse_type_alias): Likewise.
(Parser::parse_struct): Likewise.
(Parser::parse_struct_field): Likewise.
(Parser::parse_enum): Likewise.
(Parser::parse_enum_item): Likewise.
(Parser::parse_union): Likewise.
(Parser::parse_static_item): Likewise.
(Parser::parse_trait): Likewise.
(Parser::parse_trait_item): Likewise.
(Parser::parse_trait_type): Likewise.
(Parser::parse_trait_const): Likewise.
(Parser::parse_external_item): Likewise.
(Parser::parse_generic_args_binding): Likewise.
(Parser::parse_method): Likewise.
(Parser::parse_maybe_named_param): Likewise.
(Parser::parse_identifier_pattern): Likewise.
(Parser::parse_struct_expr_field): Likewise.
(ResolveItem::visit): Likewise.
* typecheck/rust-hir-type-check-implitem.cc (TypeCheckImplItem::visit):Add comments
* resolve/rust-ast-resolve-item.cc (ResolveTraitItems::visit): Likewise.
* checks/lints/rust-lint-scan-deadcode.h: Fix error location

Signed-off-by: Raiki Tamura <tamaron1203@gmail.com>