[PATCH Rust front-end v2 02/37] gccrs: Add nessecary hooks for a Rust front-end testsuite

2022-08-24 Thread herron . philip
From: Philip Herron This copy's over code from other front-end testsuites to enable testing for the rust front-end specifically. Co-authored-by: Marc Poulhiès Co-authored-by: Thomas Schwinge --- gcc/testsuite/lib/rust-dg.exp | 49 + gcc/testsuite/lib/rust.exp| 186 +++

[PATCH Rust front-end v2 04/37] gccrs: Add link cases testsuite

2022-08-24 Thread herron . philip
From: Philip Herron This testsuite is heavily inspired from the lto testsuite which uses a pattern that each file is compiled to an object file and finally linked together. Since rust does not have headers/prototypes we rely on the ordering here so that all files numbered greater than zero get co

[PATCH Rust front-end v2 01/37] Use DW_ATE_UTF for the Rust 'char' type

2022-08-24 Thread herron . philip
From: Tom Tromey The Rust 'char' type should use the DWARF DW_ATE_UTF encoding. --- gcc/dwarf2out.cc | 23 ++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/gcc/dwarf2out.cc b/gcc/dwarf2out.cc index e3920c898f5..a8bccbabca4 100644 --- a/gcc/dwarf2out.cc +++ b/

[PATCH Rust front-end v2 09/37] gccrs: Add Lexer for Rust front-end

2022-08-24 Thread herron . philip
From: The Other The lexer is refered to as a ManagedTokenSource within the parser, this lexer does not currently support unicode but serves as a starting point to do so. Co-authored-by: Philip Herron Co-authored-by: Arthur Cohen Co-authored-by: Mark Wielaard --- gcc/rust/lex/rust-codepoint.h

Rust frontend patches v2

2022-08-24 Thread herron . philip
This is the 2nd patch set for gccrs, since v1 we have dropped the changes for target hooks which are not nessecary for us right now. This now focuses directly on the front-end the only patch that affects GCC now is a tweak to debug info. Note we are close to merging our port of the C++ constexpr co

[PATCH Rust front-end v2 03/37] gccrs: Add Debug info testsuite

2022-08-24 Thread herron . philip
From: Philip Herron This testsuite is specifically about testcases which scan the asm debug info for results. Co-authored-by: Tom Tromey --- gcc/testsuite/rust/debug/chartype.rs | 10 ++ .../rust/debug/custom_link_section.rs | 13 gcc/testsuite/rust/debug/debug.ex

[PATCH Rust front-end v2 07/37] gccrs: Add gcc-check-target check-rust

2022-08-24 Thread herron . philip
From: Philip Herron This allows us to invoke the rust testsuite. ChangeLog: * Makefile.def: Add autogen target * Makefile.in: regenerate via autogen --- Makefile.def | 1 + Makefile.in | 8 2 files changed, 9 insertions(+) diff --git a/Makefile.def b/Makefile.def inde

[PATCH Rust front-end v2 16/37] gccrs: Add port of FNV hash used during legacy symbol mangling

2022-08-24 Thread herron . philip
From: Philip Herron This hash was ported from the go runime as we needed a hash for the legacy symbol mangling system. Which means all symbols in Rust contain a hash of some metadata for uniqueness on generic functions. --- gcc/rust/util/fnv-hash.h | 95

[PATCH Rust front-end v2 17/37] gccrs: Add Rust ABI enum helpers

2022-08-24 Thread herron . philip
From: Philip Herron This is a simple helper over an enum of possible ABI options in Rust. --- gcc/rust/util/rust-abi.cc | 72 +++ gcc/rust/util/rust-abi.h | 45 2 files changed, 117 insertions(+) create mode 100644 gcc/rust/util/rust

[PATCH Rust front-end v2 18/37] gccrs: Add Base62 implementation

2022-08-24 Thread herron . philip
From: Arthur Cohen Used for V0 symbol mangling scheme which. --- gcc/rust/util/rust-base62.cc | 46 gcc/rust/util/rust-base62.h | 34 ++ 2 files changed, 80 insertions(+) create mode 100644 gcc/rust/util/rust-base62.cc create mode 1

[PATCH Rust front-end v2 19/37] gccrs: Add implementation of Optional

2022-08-24 Thread herron . philip
From: Arthur Cohen Add an Optional class to improve error handling --- gcc/rust/util/rust-optional-test.cc | 111 +++ gcc/rust/util/rust-optional.h | 278 2 files changed, 389 insertions(+) create mode 100644 gcc/rust/util/rust-optional-test.cc create

[PATCH Rust front-end v2 28/37] gccrs: Add metadata ouptput pass

2022-08-24 Thread herron . philip
From: Philip Herron Extern crates statements to tell the front-end to look for another library. The mechanism here is heavily inspired from gccgo, so when we compile a library for example we invoke: gccrs -g -O2 -frust-crate=mylib -c src/lib.rs -o src/mylib.o All going well this object file w

[PATCH Rust front-end v2 15/37] gccrs: Add wrapper for make_unique

2022-08-24 Thread herron . philip
From: Philip Herron This is a wrapper for make_unique we can likely get rid of this as there are other implementations available or simply keep using the unique_ptr constructor. --- gcc/rust/util/rust-make-unique.h | 35 1 file changed, 35 insertions(+) create m

[PATCH Rust front-end v2 21/37] gccrs: Add helpers mappings canonical path and lang items

2022-08-24 Thread herron . philip
From: Philip Herron These are various helper classes used in the compiler pipeline. --- gcc/rust/util/rust-canonical-path.h | 195 + gcc/rust/util/rust-common.h | 53 ++ gcc/rust/util/rust-hir-map.cc | 980 ++ gcc/rust/util/rust-hir-map.h

[PATCH Rust front-end v2 20/37] gccrs: Add attributes checker

2022-08-24 Thread herron . philip
From: Arthur Cohen The attribute checker is responsible for checking the validity of various attributes including built-in ones. It is currently unfinished and will receive some modifications, as well as become the host of some existing code in the compiler which needs to be refactored. One of it

[PATCH Rust front-end v2 23/37] gccrs: Add unsafe checks for Rust

2022-08-24 Thread herron . philip
From: Arthur Cohen The UnsafeChecker visitor verifies that unsafe actions are only performed in unsafe contexts. Otherwise, an error should be reported to the user and the compilation pipeline should be halted. These contexts, which include unsafe blocks or unsafe functions, are allowed to perfor

[PATCH Rust front-end v2 24/37] gccrs: Add const checker

2022-08-24 Thread herron . philip
From: Arthur Cohen Similarly to the unsafe checker, constant evaluation can only be performed in a few contexts and include restrictions on the Rust language. Should the user fail to uphold those conditions, errors will be reported and the compilation pipeline interrupted. These contexts are as

[PATCH Rust front-end v2 25/37] gccrs: Add privacy checks

2022-08-24 Thread herron . philip
From: Arthur Cohen This pass is responsible for resolving the privacy of items and verifying that access to these items is performed within the limits of that privacy. By default, items in Rust are private and only public to the current module and its submodules. However, the user can annotate an

[PATCH Rust front-end v2 27/37] gccrs: Add unused variable scan

2022-08-24 Thread herron . philip
From: Philip Herron This is a simple walk_tree which acts on the monomorphized code. By walking the compiled translation unit of functions. --- gcc/rust/checks/lints/rust-lint-unused-var.cc | 98 +++ gcc/rust/checks/lints/rust-lint-unused-var.h | 36 +++ 2 files changed, 134

[PATCH Rust front-end v2 30/37] gccrs: These are wrappers ported from reusing gccgo

2022-08-24 Thread herron . philip
From: Philip Herron The wrappers over linemap and location will eventually disappear here but served as a useful starting point for us. We have wrappers over the diagnostics system which we might be able to get rid of as well. --- gcc/rust/rust-diagnostics.cc | 244 ++

[PATCH Rust front-end v2 33/37] gccrs: add lang-spec.h

2022-08-24 Thread herron . philip
From: Philip Herron This specifies the extensions of the Rust language. --- gcc/rust/lang-specs.h | 26 ++ 1 file changed, 26 insertions(+) create mode 100644 gcc/rust/lang-specs.h diff --git a/gcc/rust/lang-specs.h b/gcc/rust/lang-specs.h new file mode 100644 index 000

[PATCH Rust front-end v2 26/37] gccrs: Add dead code scan on HIR

2022-08-24 Thread herron . philip
From: Thomas Young In order to find dead code we use a depth first search and keep liveness variables, after type resolution. In this case, if a function is unused and it calls another function the 2nd function is now unused since the caller is not used etc. The algorithm is a depth first search.

[PATCH Rust front-end v2 32/37] gccrs: Add config-lang.in

2022-08-24 Thread herron . philip
From: Philip Herron This was a copy paste from gccgo front-end, we do not use any of the target_libs yet but we will need these when we support the libpanic crate. --- gcc/rust/config-lang.in | 34 ++ 1 file changed, 34 insertions(+) create mode 100644 gcc/rust/c

[PATCH Rust front-end v2 35/37] gccrs: add compiler driver

2022-08-24 Thread herron . philip
From: Philip Herron Our compiler driver is pretty simple so far, the key piece to enforce is that a compilation unit in Rust is the whole crate so the process for compiling rust means pointing the compiler at the main entry point such as src/lib.rs or src/main.rs where the expansion pass takes ov

[PATCH Rust front-end v2 37/37] gccrs: Add README, CONTRIBUTING and compiler logo

2022-08-24 Thread herron . philip
From: Philip Herron We still need to write out documentation section but these README's will help in the mean time. --- gcc/rust/CONTRIBUTING.md | 130 +++ gcc/rust/README.md | 264 +++ gcc/rust/logo.png| Bin 0 -> 70864 bytes 3 f

[PATCH Rust front-end v2 34/37] gccrs: add lang.opt

2022-08-24 Thread herron . philip
From: Philip Herron We have some rust specific langugage options note -fwrapv is enabled by default in the code. We are trying to respect options such as -Wunused-result which we get by porting over c++ no-discard for rust's must-use attribute, so we have enabled these by default directly here. -

[PATCH Rust front-end v2 31/37] gccrs: Add GCC Rust front-end Make-lang.in

2022-08-24 Thread herron . philip
From: Philip Herron This is the Makefile for our front-end. --- gcc/rust/Make-lang.in | 400 ++ 1 file changed, 400 insertions(+) create mode 100644 gcc/rust/Make-lang.in diff --git a/gcc/rust/Make-lang.in b/gcc/rust/Make-lang.in new file mode 100644 ind

[PATCH Rust front-end v2 36/37] gccrs: compiler proper interface kicks off the pipeline

2022-08-24 Thread herron . philip
From: Philip Herron This is a wrapper to get out of C land in the rust-lang.cc and into our class hierarchy for the rust front-end. We expect that the front-end only support one source file input as the expansion pass will attempt to resolve that relative pass and parse accordingly. The main mis

Re: [PATCH Rust front-end v2 01/37] Use DW_ATE_UTF for the Rust 'char' type

2022-08-24 Thread Jason Merrill via Gcc-rust
On 8/24/22 04:59, herron.phi...@googlemail.com wrote: From: Tom Tromey The Rust 'char' type should use the DWARF DW_ATE_UTF encoding. The DWARF changes are OK. --- gcc/dwarf2out.cc | 23 ++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/gcc/dwarf2out.c