]> git.ipfire.org Git - thirdparty/gcc.git/log
thirdparty/gcc.git
2 years agoMerge #1811
bors[bot] [Wed, 1 Feb 2023 14:24:35 +0000 (14:24 +0000)] 
Merge #1811

1811: Merge upstream (dummy), "Rust front-end patches v4" r=tschwinge a=tschwinge

Last we did #1700 "Merge upstream, last commit before GCC/Rust upstreaming",
which merged commit b4fddbe9592e9feb37ce567d90af822b75995531 from GCC upstream
master branch.

This one now merges the "Rust front-end patches v4", commits
b4fddbe9592e9feb37ce567d90af822b75995531..edc676cfe8988c62c81b0df224c7fe82583012b1:

      - dd950cbbb97 Use DW_ATE_UTF for the Rust 'char' type
      - b772a504eff gccrs: Add necessary hooks for a Rust front-end testsuite
      - 4b8f3005af0 gccrs: Add Debug info testsuite
      - f60df7e6202 gccrs: Add link cases testsuite
      - 97705b4459b gccrs: Add general compilation test cases
      - 5a56869d6e3 gccrs: Add execution test cases
      - dc4171edb3c gccrs: Add gcc-check-target check-rust
      - 6b35ae12ce9 gccrs: Add Rust front-end base AST data structures
      - 438ae944fa6 gccrs: Add definitions of Rust Items in AST data structures
      - d588754c826 gccrs: Add full definitions of Rust AST data structures
      - 5b981e9c741 gccrs: Add Rust AST visitors
      - 18f6990f842 gccrs: Add Lexer for Rust front-end
      - 35e4f3b4af4 gccrs: Add Parser for Rust front-end pt.1
      - 32c8fb0eeaf gccrs: Add Parser for Rust front-end pt.2
      - 1841081a8a3 gccrs: Add expansion pass for the Rust front-end
      - 85a8fe00f80 gccrs: Add name resolution pass to the Rust front-end
      - 8ad1d56d68a gccrs: Add declarations for Rust HIR
      - 7641eaead40 gccrs: Add HIR definitions and visitor framework
      - 7999cf327de gccrs: Add AST to HIR lowering pass
      - b32b1b1576a gccrs: Add wrapper for make_unique
      - c7f8347e83c gccrs: Add port of FNV hash used during legacy symbol mangling
      - 15b0278905e gccrs: Add Rust ABI enum helpers
      - eb10bc5225e gccrs: Add Base62 implementation
      - 9a4fee5f57c gccrs: Add implementation of Optional
      - 2e7fc8780e0 gccrs: Add attributes checker
      - 9ce37e72062 gccrs: Add helpers mappings canonical path and lang items
      - c6c3db21769 gccrs: Add type resolution and trait solving pass
      - 24393cb68fa gccrs: Add Rust type information
      - 06688fe40a2 gccrs: Add remaining type system transformations
      - b1b35204d8a gccrs: Add unsafe checks for Rust
      - 5215235f016 gccrs: Add const checker
      - ca246e573fb gccrs: Add privacy checks
      - 520b52b24e7 gccrs: Add dead code scan on HIR
      - 4d67468d1d4 gccrs: Add unused variable scan
      - 509e4c32c6a gccrs: Add metadata output pass
      - 15f04af347e gccrs: Add base for HIR to GCC GENERIC lowering
      - 019b2f15581 gccrs: Add HIR to GCC GENERIC lowering for all nodes
      - cfbda2f78ba gccrs: Add HIR to GCC GENERIC lowering entry point
      - fe6264fa28a gccrs: These are wrappers ported from reusing gccgo
      - bba14a0790f gccrs: Add compiler driver
      - ea34614225d gccrs: Compiler proper interface kicks off the pipeline
      - ab1e0db43c2 gccrs: Add lang-spec.h
      - 5e7d199739f gccrs: Add lang.opt
      - 88415d33bb3 gccrs: Add GCC Rust front-end Make-lang.in
      - b07ef39ffbf gccrs: Add fatal_error when experimental flag is not present
      - a75f038c069 gccrs: Add config-lang.in
      - edc676cfe89 gccrs: Add README, CONTRIBUTING and compiler logo

This merge is done with `git merge --strategy=ours`, so that we effectively
don't bring any changes.  Rationale: any changes due to upstream review etc.,
have already been applied individually to GCC/Rust master branch, and any
remaining changes we'd either like to persist, or assess individually, later.

Co-authored-by: Tom Tromey <tom@tromey.com>
Co-authored-by: Philip Herron <philip.herron@embecosm.com>
Co-authored-by: Joel Phillips <simplytheother@gmail.com>
Co-authored-by: Arthur Cohen <arthur.cohen@embecosm.com>
2 years agoMerge commit 'edc676cfe8988c62c81b0df224c7fe82583012b1' into HEAD
Thomas Schwinge [Wed, 1 Feb 2023 09:34:30 +0000 (10:34 +0100)] 
Merge commit 'edc676cfe8988c62c81b0df224c7fe82583012b1' into HEAD

Last we did #1700 "Merge upstream, last commit before GCC/Rust upstreaming",
which merged commit b4fddbe9592e9feb37ce567d90af822b75995531 from GCC upstream
master branch.

This one now merges the "Rust front-end patches v4", commits
b4fddbe9592e9feb37ce567d90af822b75995531..edc676cfe8988c62c81b0df224c7fe82583012b1:

      - dd950cbbb97 Use DW_ATE_UTF for the Rust 'char' type
      - b772a504eff gccrs: Add necessary hooks for a Rust front-end testsuite
      - 4b8f3005af0 gccrs: Add Debug info testsuite
      - f60df7e6202 gccrs: Add link cases testsuite
      - 97705b4459b gccrs: Add general compilation test cases
      - 5a56869d6e3 gccrs: Add execution test cases
      - dc4171edb3c gccrs: Add gcc-check-target check-rust
      - 6b35ae12ce9 gccrs: Add Rust front-end base AST data structures
      - 438ae944fa6 gccrs: Add definitions of Rust Items in AST data structures
      - d588754c826 gccrs: Add full definitions of Rust AST data structures
      - 5b981e9c741 gccrs: Add Rust AST visitors
      - 18f6990f842 gccrs: Add Lexer for Rust front-end
      - 35e4f3b4af4 gccrs: Add Parser for Rust front-end pt.1
      - 32c8fb0eeaf gccrs: Add Parser for Rust front-end pt.2
      - 1841081a8a3 gccrs: Add expansion pass for the Rust front-end
      - 85a8fe00f80 gccrs: Add name resolution pass to the Rust front-end
      - 8ad1d56d68a gccrs: Add declarations for Rust HIR
      - 7641eaead40 gccrs: Add HIR definitions and visitor framework
      - 7999cf327de gccrs: Add AST to HIR lowering pass
      - b32b1b1576a gccrs: Add wrapper for make_unique
      - c7f8347e83c gccrs: Add port of FNV hash used during legacy symbol mangling
      - 15b0278905e gccrs: Add Rust ABI enum helpers
      - eb10bc5225e gccrs: Add Base62 implementation
      - 9a4fee5f57c gccrs: Add implementation of Optional
      - 2e7fc8780e0 gccrs: Add attributes checker
      - 9ce37e72062 gccrs: Add helpers mappings canonical path and lang items
      - c6c3db21769 gccrs: Add type resolution and trait solving pass
      - 24393cb68fa gccrs: Add Rust type information
      - 06688fe40a2 gccrs: Add remaining type system transformations
      - b1b35204d8a gccrs: Add unsafe checks for Rust
      - 5215235f016 gccrs: Add const checker
      - ca246e573fb gccrs: Add privacy checks
      - 520b52b24e7 gccrs: Add dead code scan on HIR
      - 4d67468d1d4 gccrs: Add unused variable scan
      - 509e4c32c6a gccrs: Add metadata output pass
      - 15f04af347e gccrs: Add base for HIR to GCC GENERIC lowering
      - 019b2f15581 gccrs: Add HIR to GCC GENERIC lowering for all nodes
      - cfbda2f78ba gccrs: Add HIR to GCC GENERIC lowering entry point
      - fe6264fa28a gccrs: These are wrappers ported from reusing gccgo
      - bba14a0790f gccrs: Add compiler driver
      - ea34614225d gccrs: Compiler proper interface kicks off the pipeline
      - ab1e0db43c2 gccrs: Add lang-spec.h
      - 5e7d199739f gccrs: Add lang.opt
      - 88415d33bb3 gccrs: Add GCC Rust front-end Make-lang.in
      - b07ef39ffbf gccrs: Add fatal_error when experimental flag is not present
      - a75f038c069 gccrs: Add config-lang.in
      - edc676cfe89 gccrs: Add README, CONTRIBUTING and compiler logo

This merge is done with `git merge --strategy=ours`, so that we effectively
don't bring any changes.  Rationale: any changes due to upstream review etc.,
have already been applied individually to GCC/Rust master branch, and any
remaining changes we'd either like to persist, or assess individually, later.

2 years agoMerge #1788
bors[bot] [Tue, 31 Jan 2023 21:46:24 +0000 (21:46 +0000)] 
Merge #1788

1788: ci: Add commit format checker r=CohenArthur a=CohenArthur

Bring over the commit checker from `gcc-patch-dev` with the `gccrs` prefix checker enabled only for `gcc-patch-dev` PRs. I'll open up an issue to make sure that in the future it's easier to keep that folder in sync between the two branches

Co-authored-by: Arthur Cohen <arthur.cohen@embecosm.com>
2 years agoci: Add commit format checker
Arthur Cohen [Tue, 31 Jan 2023 14:38:02 +0000 (15:38 +0100)] 
ci: Add commit format checker

2 years agoMerge #1775
bors[bot] [Mon, 30 Jan 2023 23:46:48 +0000 (23:46 +0000)] 
Merge #1775

1775: Create and use CompilePatternLet visitor for compiling let statments r=philberty a=powerboat9

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
Implements and utilizes CompilePatternLet to compile let statements

Co-authored-by: Owen Avery <powerboat9.gamer@gmail.com>
2 years agoCreate and use CompilePatternLet visitor for compiling let statments
Owen Avery [Fri, 27 Jan 2023 16:47:30 +0000 (11:47 -0500)] 
Create and use CompilePatternLet visitor for compiling let statments

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
2 years agoMerge #1776
bors[bot] [Mon, 30 Jan 2023 13:27:16 +0000 (13:27 +0000)] 
Merge #1776

1776: fixed compiler error message on wildcard pattern within expression r=CohenArthur a=00AR

Signed-off-by: Abdul Rafey <abdulrafeyq@gmail.com>
fixed compiler error message on wildcard pattern '_'  within expression.
Added a new testcase for the same.
#867

Co-authored-by: Abdul Rafey <abdulrafeyq@gmail.com>
2 years agoMerge #1735
bors[bot] [Mon, 30 Jan 2023 12:44:25 +0000 (12:44 +0000)] 
Merge #1735

1735: macro: Allow builtin `MacroInvocation`s within the AST r=CohenArthur a=CohenArthur

gcc/rust/ChangeLog:

* ast/rust-macro.h (enum class): Add `BuiltinMacro` enum class
* expand/rust-attribute-visitor.cc (AttrVisitor::visit): Mention switching on `macro.kind` once builtin macro invocations are properly handled
* parse/rust-parse-impl.h (Parser::parse_macro_invocation): Switch to new MacroInvocation API
(Parser::parse_type): Switch to new MacroInvocation API
(Parser::parse_type_no_bounds): Switch to new MacroInvocation API

This will be necessary for proper handling of builtin macros with the new `EarlyNameResolver` class and associated fixed-point algorithm

Co-authored-by: Arthur Cohen <arthur.cohen@embecosm.com>
2 years agomacro: Allow builtin `MacroInvocation`s within the AST
Arthur Cohen [Wed, 11 Jan 2023 14:29:22 +0000 (15:29 +0100)] 
macro: Allow builtin `MacroInvocation`s within the AST

gcc/rust/ChangeLog:

* ast/rust-macro.h (enum class): Add `BuiltinMacro` enum class.
* expand/rust-attribute-visitor.cc (AttrVisitor::visit): Mention
switching on `macro.kind` once builtin macro invocations are properly
handled.
* parse/rust-parse-impl.h (Parser::parse_macro_invocation): Switch to new MacroInvocation
API.
(Parser::parse_type): Likewise.
(Parser::parse_type_no_bounds): Likewise.

2 years agoMerge #1778
bors[bot] [Mon, 30 Jan 2023 11:41:57 +0000 (11:41 +0000)] 
Merge #1778

1778: Moved operator.h to util/rust-operators.h. r=CohenArthur a=00AR

Signed-off-by: Abdul Rafey <abdulrafeyq@gmail.com>
Refactored operator.h. #1768
Changes shown in rust-operators.h are done by clang-formater.

Co-authored-by: Abdul Rafey <abdulrafeyq@gmail.com>
2 years agofixed compiler error message on wildcard pattern within expression
Abdul Rafey [Sun, 29 Jan 2023 11:35:23 +0000 (17:05 +0530)] 
fixed compiler error message on wildcard pattern within expression

Signed-off-by: Abdul Rafey <abdulrafeyq@gmail.com>
2 years agomoved operator.h to util/rust-operators.h
Abdul Rafey [Sun, 29 Jan 2023 11:29:17 +0000 (16:59 +0530)] 
moved operator.h to util/rust-operators.h

Signed-off-by: Abdul Rafey <abdulrafeyq@gmail.com>
2 years agoMerge #1777
bors[bot] [Mon, 30 Jan 2023 09:06:03 +0000 (09:06 +0000)] 
Merge #1777

1777: Rename file rust-ast-full-test.cc to rust-ast.cc r=CohenArthur a=Parthib314

* Fixes issue  #1765

**Rename the `rust-ast-full-test.cc` to `rust-ast.cc` and also update it on `Make-lang.in`**

Co-authored-by: Parthib <parthibdutta02@gmail.com>
2 years agoRename file rust-ast-full-test.cc to rust-ast.cc
Parthib [Sat, 28 Jan 2023 16:37:45 +0000 (22:07 +0530)] 
Rename file rust-ast-full-test.cc to rust-ast.cc

2 years agoMerge #1759
bors[bot] [Fri, 27 Jan 2023 16:10:43 +0000 (16:10 +0000)] 
Merge #1759

1759: Revert 10-second timeout for each test r=philberty a=Parthib314

* Fixes issue #1747

**Remove the 10-second timeout for each compile case**

Co-authored-by: vagrant <vagrant@vagrant.vm>
2 years agoMerge #1772
bors[bot] [Fri, 27 Jan 2023 15:25:48 +0000 (15:25 +0000)] 
Merge #1772

1772: Added missing GroupedPattern visitors for code generation r=philberty a=powerboat9

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
Implements some missing visitor methods for GroupedPattern compilation.

Co-authored-by: Owen Avery <powerboat9.gamer@gmail.com>
2 years agoAdded missing GroupedPattern visitors for code generation
Owen Avery [Wed, 11 Jan 2023 16:57:28 +0000 (11:57 -0500)] 
Added missing GroupedPattern visitors for code generation

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
2 years agoMerge #1771
bors[bot] [Thu, 26 Jan 2023 15:28:46 +0000 (15:28 +0000)] 
Merge #1771

1771: Add type resolution for grouped patterns r=philberty a=powerboat9

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
Adds type resolution for GroupedPattern.

Co-authored-by: Owen Avery <powerboat9.gamer@gmail.com>
2 years agoAdd type resolution for grouped patterns
Owen Avery [Wed, 11 Jan 2023 16:56:05 +0000 (11:56 -0500)] 
Add type resolution for grouped patterns

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
2 years agoAdd get_item method for HIR::GroupedPattern
Owen Avery [Wed, 25 Jan 2023 18:00:38 +0000 (13:00 -0500)] 
Add get_item method for HIR::GroupedPattern

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
2 years agoMerge #1769
bors[bot] [Wed, 25 Jan 2023 09:49:08 +0000 (09:49 +0000)] 
Merge #1769

1769: Add HIR lowering for GroupedPattern r=philberty a=powerboat9

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
Implements HIR lowering for grouped patterns.

Co-authored-by: Owen Avery <powerboat9.gamer@gmail.com>
2 years agoAdd HIR lowering for GroupedPattern
Owen Avery [Wed, 11 Jan 2023 16:54:54 +0000 (11:54 -0500)] 
Add HIR lowering for GroupedPattern

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
2 years agoMerge #1763
bors[bot] [Tue, 24 Jan 2023 16:39:54 +0000 (16:39 +0000)] 
Merge #1763

1763: Do not crash on empty macros expand. Fixes #1712 r=philberty a=teromene

This PR fixes a compiler crash when expanding an empty macro into an existing AST.
(I ran clang-format but it marked a few other files as dirty, and I therefore did not touch them)

Signed-off-by: Lyra Karenai <teromene@teromene.fr>
Co-authored-by: Lyra <teromene@teromene.fr>
2 years agoMerge #1760
bors[bot] [Tue, 24 Jan 2023 15:52:01 +0000 (15:52 +0000)] 
Merge #1760

1760: Support GroupedPattern during name resolution r=philberty a=powerboat9

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
Adds support for GroupedPattern during name resolution.

Addresses #1136

Co-authored-by: Owen Avery <powerboat9.gamer@gmail.com>
2 years agoDo not crash on empty macros expand. Fixes #1712
Lyra [Tue, 24 Jan 2023 13:15:42 +0000 (14:15 +0100)] 
Do not crash on empty macros expand. Fixes #1712

This commit fixes a compiler crash when expanding an empty macro into an existing AST.

Signed-off-by: Lyra Karenai <teromene@teromene.fr>
2 years agoSupport GroupedPattern during name resolution
Owen Avery [Wed, 11 Jan 2023 16:53:51 +0000 (11:53 -0500)] 
Support GroupedPattern during name resolution

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
2 years agoRevert 10-second timeout for each test
vagrant [Sat, 21 Jan 2023 18:33:07 +0000 (18:33 +0000)] 
Revert 10-second timeout for each test

2 years agoMerge #1732
bors[bot] [Fri, 20 Jan 2023 08:36:23 +0000 (08:36 +0000)] 
Merge #1732

1732: testsuite: Handle Windows carriage returns properly r=CohenArthur a=CohenArthur

In dg-output, check for \r* carriage returns to make sure execution tests pass on windows platforms

gcc/testsuite/ChangeLog:

* rust/execute/torture/builtin_macro_cfg.rs: Handle carriage returns properly
* rust/execute/torture/builtin_macro_concat.rs: Handle carriage returns properly
* rust/execute/torture/builtin_macro_env.rs: Handle carriage returns properly
* rust/execute/torture/builtin_macro_include_bytes.rs: Handle carriage returns properly
* rust/execute/torture/builtin_macro_include_str.rs: Handle carriage returns properly
* rust/execute/torture/builtin_macro_line.rs: Handle carriage returns properly
* rust/execute/torture/builtin_macros1.rs: Handle carriage returns properly
* rust/execute/torture/builtin_macros3.rs: Handle carriage returns properly
* rust/execute/torture/cfg1.rs: Handle carriage returns properly
* rust/execute/torture/cfg2.rs: Handle carriage returns properly
* rust/execute/torture/cfg3.rs: Handle carriage returns properly
* rust/execute/torture/cfg4.rs: Handle carriage returns properly
* rust/execute/torture/coercion1.rs: Handle carriage returns properly
* rust/execute/torture/coercion2.rs: Handle carriage returns properly
* rust/execute/torture/extern_mod4.rs: Handle carriage returns properly
* rust/execute/torture/helloworld1.rs: Handle carriage returns properly
* rust/execute/torture/helloworld2.rs: Handle carriage returns properly
* rust/execute/torture/issue-1198.rs: Handle carriage returns properly
* rust/execute/torture/issue-1231.rs: Handle carriage returns properly
* rust/execute/torture/issue-1232.rs: Handle carriage returns properly
* rust/execute/torture/issue-1249.rs: Handle carriage returns properly
* rust/execute/torture/issue-1436.rs: Handle carriage returns properly
* rust/execute/torture/issue-1496.rs: Handle carriage returns properly
* rust/execute/torture/issue-647.rs: Handle carriage returns properly
* rust/execute/torture/issue-845.rs: Handle carriage returns properly
* rust/execute/torture/issue-851.rs: Handle carriage returns properly
* rust/execute/torture/issue-858.rs: Handle carriage returns properly
* rust/execute/torture/issue-976.rs: Handle carriage returns properly
* rust/execute/torture/macros10.rs: Handle carriage returns properly
* rust/execute/torture/macros11.rs: Handle carriage returns properly
* rust/execute/torture/macros12.rs: Handle carriage returns properly
* rust/execute/torture/macros13.rs: Handle carriage returns properly
* rust/execute/torture/macros14.rs: Handle carriage returns properly
* rust/execute/torture/macros2.rs: Handle carriage returns properly
* rust/execute/torture/macros22.rs: Handle carriage returns properly
* rust/execute/torture/macros29.rs: Handle carriage returns properly
* rust/execute/torture/macros3.rs: Handle carriage returns properly
* rust/execute/torture/macros30.rs: Handle carriage returns properly
* rust/execute/torture/macros31.rs: Handle carriage returns properly
* rust/execute/torture/macros7.rs: Handle carriage returns properly
* rust/execute/torture/macros8.rs: Handle carriage returns properly
* rust/execute/torture/macros9.rs: Handle carriage returns properly
* rust/execute/torture/match1.rs: Handle carriage returns properly
* rust/execute/torture/match2.rs: Handle carriage returns properly
* rust/execute/torture/match3.rs: Handle carriage returns properly
* rust/execute/torture/match_bool1.rs: Handle carriage returns properly
* rust/execute/torture/match_byte1.rs: Handle carriage returns properly
* rust/execute/torture/match_char1.rs: Handle carriage returns properly
* rust/execute/torture/match_int1.rs: Handle carriage returns properly
* rust/execute/torture/match_loop1.rs: Handle carriage returns properly
* rust/execute/torture/match_range1.rs: Handle carriage returns properly
* rust/execute/torture/match_range2.rs: Handle carriage returns properly
* rust/execute/torture/match_tuple1.rs: Handle carriage returns properly
* rust/execute/torture/method1.rs: Handle carriage returns properly
* rust/execute/torture/method2.rs: Handle carriage returns properly
* rust/execute/torture/method3.rs: Handle carriage returns properly
* rust/execute/torture/method4.rs: Handle carriage returns properly
* rust/execute/torture/operator_overload_1.rs: Handle carriage returns properly
* rust/execute/torture/operator_overload_10.rs: Handle carriage returns properly
* rust/execute/torture/operator_overload_11.rs: Handle carriage returns properly
* rust/execute/torture/operator_overload_12.rs: Handle carriage returns properly
* rust/execute/torture/operator_overload_2.rs: Handle carriage returns properly
* rust/execute/torture/operator_overload_4.rs: Handle carriage returns properly
* rust/execute/torture/operator_overload_5.rs: Handle carriage returns properly
* rust/execute/torture/operator_overload_6.rs: Handle carriage returns properly
* rust/execute/torture/operator_overload_7.rs: Handle carriage returns properly
* rust/execute/torture/operator_overload_8.rs: Handle carriage returns properly
* rust/execute/torture/operator_overload_9.rs: Handle carriage returns properly
* rust/execute/torture/str-layout1.rs: Handle carriage returns properly
* rust/execute/torture/str-zero.rs: Handle carriage returns properly
* rust/execute/torture/trait1.rs: Handle carriage returns properly
* rust/execute/torture/trait10.rs: Handle carriage returns properly
* rust/execute/torture/trait11.rs: Handle carriage returns properly
* rust/execute/torture/trait12.rs: Handle carriage returns properly
* rust/execute/torture/trait13.rs: Handle carriage returns properly
* rust/execute/torture/trait2.rs: Handle carriage returns properly
* rust/execute/torture/trait3.rs: Handle carriage returns properly
* rust/execute/torture/trait4.rs: Handle carriage returns properly
* rust/execute/torture/trait5.rs: Handle carriage returns properly
* rust/execute/torture/trait6.rs: Handle carriage returns properly
* rust/execute/torture/trait7.rs: Handle carriage returns properly
* rust/execute/torture/trait8.rs: Handle carriage returns properly
* rust/execute/torture/trait9.rs: Handle carriage returns properly

Co-authored-by: Arthur Cohen <arthur.cohen@embecosm.com>
2 years agotestsuite: Handle Windows carriage returns properly
Arthur Cohen [Wed, 11 Jan 2023 10:36:11 +0000 (11:36 +0100)] 
testsuite: Handle Windows carriage returns properly

In dg-output, check for \r* carriage returns to make sure execution
tests pass on windows platforms

gcc/testsuite/ChangeLog:

* rust/execute/torture/builtin_macro_cfg.rs: Handle carriage returns
properly.
* rust/execute/torture/builtin_macro_concat.rs: Likewise.
* rust/execute/torture/builtin_macro_env.rs: Likewise.
* rust/execute/torture/builtin_macro_include_bytes.rs: Likewise.
* rust/execute/torture/builtin_macro_include_str.rs: Likewise.
* rust/execute/torture/builtin_macro_line.rs: Likewise.
* rust/execute/torture/builtin_macros1.rs: Likewise.
* rust/execute/torture/builtin_macros3.rs: Likewise.
* rust/execute/torture/cfg1.rs: Likewise.
* rust/execute/torture/cfg2.rs: Likewise.
* rust/execute/torture/cfg3.rs: Likewise.
* rust/execute/torture/cfg4.rs: Likewise.
* rust/execute/torture/coercion1.rs: Likewise.
* rust/execute/torture/coercion2.rs: Likewise.
* rust/execute/torture/extern_mod4.rs: Likewise.
* rust/execute/torture/helloworld1.rs: Likewise.
* rust/execute/torture/helloworld2.rs: Likewise.
* rust/execute/torture/issue-1198.rs: Likewise.
* rust/execute/torture/issue-1231.rs: Likewise.
* rust/execute/torture/issue-1232.rs: Likewise.
* rust/execute/torture/issue-1249.rs: Likewise.
* rust/execute/torture/issue-1436.rs: Likewise.
* rust/execute/torture/issue-1496.rs: Likewise.
* rust/execute/torture/issue-647.rs: Likewise.
* rust/execute/torture/issue-845.rs: Likewise.
* rust/execute/torture/issue-851.rs: Likewise.
* rust/execute/torture/issue-858.rs: Likewise.
* rust/execute/torture/issue-976.rs: Likewise.
* rust/execute/torture/macros10.rs: Likewise.
* rust/execute/torture/macros11.rs: Likewise.
* rust/execute/torture/macros12.rs: Likewise.
* rust/execute/torture/macros13.rs: Likewise.
* rust/execute/torture/macros14.rs: Likewise.
* rust/execute/torture/macros2.rs: Likewise.
* rust/execute/torture/macros22.rs: Likewise.
* rust/execute/torture/macros29.rs: Likewise.
* rust/execute/torture/macros3.rs: Likewise.
* rust/execute/torture/macros30.rs: Likewise.
* rust/execute/torture/macros31.rs: Likewise.
* rust/execute/torture/macros7.rs: Likewise.
* rust/execute/torture/macros8.rs: Likewise.
* rust/execute/torture/macros9.rs: Likewise.
* rust/execute/torture/match1.rs: Likewise.
* rust/execute/torture/match2.rs: Likewise.
* rust/execute/torture/match3.rs: Likewise.
* rust/execute/torture/match_bool1.rs: Likewise.
* rust/execute/torture/match_byte1.rs: Likewise.
* rust/execute/torture/match_char1.rs: Likewise.
* rust/execute/torture/match_int1.rs: Likewise.
* rust/execute/torture/match_loop1.rs: Likewise.
* rust/execute/torture/match_range1.rs: Likewise.
* rust/execute/torture/match_range2.rs: Likewise.
* rust/execute/torture/match_tuple1.rs: Likewise.
* rust/execute/torture/method1.rs: Likewise.
* rust/execute/torture/method2.rs: Likewise.
* rust/execute/torture/method3.rs: Likewise.
* rust/execute/torture/method4.rs: Likewise.
* rust/execute/torture/operator_overload_1.rs: Likewise.
* rust/execute/torture/operator_overload_10.rs: Likewise.
* rust/execute/torture/operator_overload_11.rs: Likewise.
* rust/execute/torture/operator_overload_12.rs: Likewise.
* rust/execute/torture/operator_overload_2.rs: Likewise.
* rust/execute/torture/operator_overload_4.rs: Likewise.
* rust/execute/torture/operator_overload_5.rs: Likewise.
* rust/execute/torture/operator_overload_6.rs: Likewise.
* rust/execute/torture/operator_overload_7.rs: Likewise.
* rust/execute/torture/operator_overload_8.rs: Likewise.
* rust/execute/torture/operator_overload_9.rs: Likewise.
* rust/execute/torture/str-layout1.rs: Likewise.
* rust/execute/torture/str-zero.rs: Likewise.
* rust/execute/torture/trait1.rs: Likewise.
* rust/execute/torture/trait10.rs: Likewise.
* rust/execute/torture/trait11.rs: Likewise.
* rust/execute/torture/trait12.rs: Likewise.
* rust/execute/torture/trait13.rs: Likewise.
* rust/execute/torture/trait2.rs: Likewise.
* rust/execute/torture/trait3.rs: Likewise.
* rust/execute/torture/trait4.rs: Likewise.
* rust/execute/torture/trait5.rs: Likewise.
* rust/execute/torture/trait6.rs: Likewise.
* rust/execute/torture/trait7.rs: Likewise.
* rust/execute/torture/trait8.rs: Likewise.
* rust/execute/torture/trait9.rs: Likewise.
* rust/execute/torture/closure2.rs: Likewise.
* rust/execute/torture/closure3.rs: Likewise.
* rust/execute/torture/loop-condition-eval.rs: Likewise.
* rust/execute/torture/operator_overload_3.rs: Likewise.

2 years agoMerge #1751
bors[bot] [Tue, 17 Jan 2023 16:32:09 +0000 (16:32 +0000)] 
Merge #1751

1751: README.md: Added experimental flag & updated gccrs path r=CohenArthur a=DrMahad

(1) There is a need of the flag "-frust-incomplete-and-experimental-compiler-do-not-use" because the rust1 compiler didn't work without this.

(2) The gccrs was not present in the $HOME/gccrs-install/, so updated the path to $HOME/gccrs-install/bin

Signed-off-by: MAHAD <mahadtxt@gmail.com>
Co-authored-by: MAHAD <mahadtxt@gmail.com>
2 years agoREADME.md: Added experimental flag & updated gccrs path
MAHAD [Tue, 17 Jan 2023 15:47:26 +0000 (20:47 +0500)] 
README.md: Added experimental flag & updated gccrs path

(1) There is a need of the flag "-frust-incomplete-and-experimental-compiler-do-not-use" because the rust1 compiler didn't work without this.

(2) The gccrs was not present in the $HOME/gccrs-install/, so updated the path to $HOME/gccrs-install/bin

Signed-off-by: MAHAD <mahadtxt@gmail.com>
2 years agoMerge #1736
bors[bot] [Sat, 14 Jan 2023 22:35:55 +0000 (22:35 +0000)] 
Merge #1736

1736: Change how CompileVarDecl outputs Bvariable's r=philberty a=powerboat9

This allows patterns to declare multiple/no variables

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
---

Co-authored-by: Owen Avery <powerboat9.gamer@gmail.com>
2 years agoChange how CompileVarDecl outputs Bvariable's
Owen Avery [Wed, 11 Jan 2023 17:05:39 +0000 (12:05 -0500)] 
Change how CompileVarDecl outputs Bvariable's

This allows patterns to declare multiple/no variables

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
2 years agoMerge #1733
bors[bot] [Thu, 12 Jan 2023 13:54:04 +0000 (13:54 +0000)] 
Merge #1733

1733: diagnostics: Add underline for tokens in diagnostics. r=CohenArthur a=TuringKi

Currently, the diagnostics only point to the corresponding token's start position by carets, and lack of underlines for full token.  This commit add support for such underlines in diagnostics by encoding range information in location_t.

the results like this:

```
../gcc/testsuite/rust/compile/bad_as_bool_char.rs:5:14: error: invalid cast 'bool' to 'f32' [E0054]
    5 |   let fone = t as f32;   // { dg-error "invalid cast" }
      |              ^    ~~~
../gcc/testsuite/rust/compile/bad_as_bool_char.rs:6:15: error: invalid cast 'bool' to 'f64' [E0054]
    6 |   let fzero = f as f64;  // { dg-error "invalid cast" }
      |               ^    ~~~
../gcc/testsuite/rust/compile/bad_as_bool_char.rs:8:12: error: invalid cast 'u8' to 'bool' [E0054]
    8 |   let nb = 0u8 as bool;  // { dg-error "invalid cast .u8. to .bool. \\\[E0054\\\]" }
      |            ^~~    ~~~~
../gcc/testsuite/rust/compile/bad_as_bool_char.rs:9:12: error: invalid cast 'bool' to 'char' [E0054]
    9 |   let nc = true as char; // { dg-error "invalid cast" }
      |            ^~~~    ~~~~
../gcc/testsuite/rust/compile/bad_as_bool_char.rs:13:12: error: invalid cast 'char' to 'f32' [E0054]
   13 |   let fa = a as f32;     // { dg-error "invalid cast" }
      |            ^    ~~~
../gcc/testsuite/rust/compile/bad_as_bool_char.rs:14:12: error: invalid cast 'char' to 'bool' [E0054]
   14 |   let bb = b as bool;    // { dg-error "invalid cast .char. to .bool. \\\[E0054\\\]" }
      |            ^    ~~~~
../gcc/testsuite/rust/compile/bad_as_bool_char.rs:17:12: error: invalid cast 'u32' to 'char' [E0054]
   17 |   let ab = t32 as char;  // { dg-error "invalid cast" }
      |            ^~~    ~~~~

```

This commit is split from pr #1718.

Signed-off-by: Xiao Ma <mxlol233@outlook.com>
Co-authored-by: mxlol233 <mxlol233@outlook.com>
2 years agodiagnostics: Add underline for tokens in diagnostics.
mxlol233 [Wed, 11 Jan 2023 12:36:13 +0000 (20:36 +0800)] 
diagnostics: Add underline for tokens in diagnostics.

Currently, the diagnostics only point to the corresponding token's start position by carets, and lack of underlines for full token.  This commit add support for such underlines in diagnostics by encoding range information in location_t.

Signed-off-by: Xiao Ma <mxlol233@outlook.com>
2 years agoMerge #1734
bors[bot] [Wed, 11 Jan 2023 16:45:18 +0000 (16:45 +0000)] 
Merge #1734

1734: Add get_locus function for abstract class MetaItemInner. r=CohenArthur a=TuringKi

This commit adds virtual function get_locus to base class MetaItemInner, which is helpful when we need to print  diagnostics on some sub-classes of MetaItemInner.

This commit is split from pr https://github.com/Rust-GCC/gccrs/pull/1718.

Signed-off-by: Xiao Ma <mxlol233@outlook.com>
Co-authored-by: mxlol233 <mxlol233@outlook.com>
2 years agoAdd get_locus function for abstract class MetaItemInner.
mxlol233 [Wed, 11 Jan 2023 15:24:07 +0000 (23:24 +0800)] 
Add get_locus function for abstract class MetaItemInner.

This commit adds virtual function get_locus to base class MetaItemInner, which is helpful when we need to print  diagnostics on some sub-classes of MetaItemInner.

Signed-off-by: Xiao Ma <mxlol233@outlook.com>
2 years agoMerge #1730
bors[bot] [Wed, 11 Jan 2023 11:39:37 +0000 (11:39 +0000)] 
Merge #1730

1730: Improve type checking on let statements r=philberty a=powerboat9

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
---

Improves the typechecking of patterns in let statements.

Co-authored-by: Owen Avery <powerboat9.gamer@gmail.com>
2 years agoReuse TypeCheckPattern on LetStmt's
Owen Avery [Tue, 10 Jan 2023 00:54:55 +0000 (19:54 -0500)] 
Reuse TypeCheckPattern on LetStmt's

Update Rust type-checking to reuse TypeCheckPattern on HIR::LetStmt's.
This will unify the paths and improve error handling.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
2 years agoMerge #1724
bors[bot] [Tue, 10 Jan 2023 22:39:41 +0000 (22:39 +0000)] 
Merge #1724

1724: Add support for generics associated type binding r=philberty a=philberty

This patch set adds support to specify the associated type via the argument
binding syntax. We are still missing general bounds checking so in order to
properly add more test cases for bad types we need to implement that first.
I have also changed a test case to -fsyntax-only as at the time I always get
confused between Generic arguments of foo=i32 and bar: baz only specifies
the associated type and the latter adds a bound. Currently we are lacking a
way to represent adding a bound in the AST and HIR within generic arguments
so I have raised: #1725 and #1726

Fixes #1720

Co-authored-by: Philip Herron <herron.philip@googlemail.com>
2 years agoSupport associated type bound arguments
Philip Herron [Sat, 7 Jan 2023 14:41:12 +0000 (14:41 +0000)] 
Support associated type bound arguments

This patch adds support for the GenercArgsBinding type, where you can
specify the associated types of a trait bound using `<Foo=i32>` style
syntax. Note that the type-resolution relys on the i32 impl for Add
as type resolution will resolve the `a+a` to the core::ops::Add method
so code generation will require this to exist.

I have ameded testsuite/rust/compile/bounds.rs as this code is wrongly
creating an HIR::GenericArgs with a trait-object type and causing issues.
the parsing is still correct but we dont have the mechanism to represent
this in AST and HIR properly. I think we will need a new HIR::GenericArgs
AssociatedTypeBindingBound or something similar. We are still lacking
bounds checking during are type coercions and unifications so running this
example using an f32 will wrongly pass type checking, this will need
addressed next.

Fixes #1720

Signed-off-by: Philip Herron <herron.philip@googlemail.com>
gcc/rust/ChangeLog:

* hir/tree/rust-hir-path.h:
* typecheck/rust-hir-path-probe.h:
* typecheck/rust-hir-trait-resolve.cc:
* typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit):
* typecheck/rust-tyty-bounds.cc (TypeCheckBase::get_predicate_from_bound):
(TypeBoundPredicate::TypeBoundPredicate):
(TypeBoundPredicate::operator=):
(TypeBoundPredicate::apply_generic_arguments):
(TypeBoundPredicateItem::get_tyty_for_receiver):
(TypeBoundPredicate::get_num_associated_bindings):
(TypeBoundPredicate::lookup_associated_type):
(TypeBoundPredicate::get_associated_type_items):
* typecheck/rust-tyty.cc (SubstitutionRef::get_mappings_from_generic_args):
(SubstitutionRef::infer_substitions):
(SubstitutionRef::solve_missing_mappings_from_this):
* typecheck/rust-tyty.h:

gcc/testsuite/ChangeLog:

* rust/compile/bounds.rs: change to use -fsyntax-only
* rust/execute/torture/issue-1720.rs: New test.

2 years agoAdd name resolution to generic argument associated item bindings
Philip Herron [Sat, 7 Jan 2023 17:15:23 +0000 (17:15 +0000)] 
Add name resolution to generic argument associated item bindings

When specifying generic arguments to Traits we can also specify the
associated types using `<BindingName=i32>` syntax we need to add
name resolution to the type argument here and rely on the type
resolution pass to ensure the associated type exists and to setup the
associated types accordingly.

Addresses #1720

Signed-off-by: Philip Herron <herron.philip@googlemail.com>
gcc/rust/ChangeLog:

* resolve/rust-ast-resolve-type.cc (ResolveGenericArgs::go):

2 years agoMerge #1708
bors[bot] [Mon, 9 Jan 2023 15:48:12 +0000 (15:48 +0000)] 
Merge #1708

1708: Parse declarative macro (decl_macro 2.0) r=CohenArthur a=tamaroning

This PR is currentry wip.
Opinions and advices are welcome!

Co-authored-by: Raiki Tamura <tamaron1203@gmail.com>
2 years agoImplement declarative macro 2.0 parser
Raiki Tamura [Sun, 18 Dec 2022 16:48:54 +0000 (01:48 +0900)] 
Implement declarative macro 2.0 parser
Signed-off-by: Raiki Tamura <tamaron1203@gmail.com>
2 years agoMerge #1707 #1717
bors[bot] [Thu, 5 Jan 2023 15:59:10 +0000 (15:59 +0000)] 
Merge #1707 #1717

1707: Fix frust very long typo r=CohenArthur a=CohenArthur

Missing space character

1717: format: Fix git whitespace errors r=CohenArthur a=CohenArthur

Addresses #1680
Fixes #1680

Probably does not need a changelog since I assume this commit will just be dropped when we merge

Co-authored-by: Arthur Cohen <arthur.cohen@embecosm.com>
2 years agoMerge #1711
bors[bot] [Thu, 5 Jan 2023 15:17:27 +0000 (15:17 +0000)] 
Merge #1711

1711: unsafe: check use of `target_feature` attribute r=CohenArthur a=snprajwal

The `target_feature` attribute is for conditional compilation and may or may not compile on all platforms. Using it requires an unsafe function or block.

Addresses #1411

Co-authored-by: Prajwal S N <prajwalnadig21@gmail.com>
2 years agoMerge #1709
bors[bot] [Thu, 5 Jan 2023 08:36:42 +0000 (08:36 +0000)] 
Merge #1709

1709: Check const functions for mutable references r=CohenArthur a=dme2

Fixes #1552

Co-authored-by: Dave <dme2223@gmail.com>
2 years agoMerge #1716
bors[bot] [Wed, 4 Jan 2023 20:12:07 +0000 (20:12 +0000)] 
Merge #1716

1716: rust: add bound parsing in parse_generic_arg. r=philberty a=TuringKi

This patch adds parsing for generic parameters like: <F: Foo<Bar: Foo>>. In current version, this pattern  leads to endless loop.

Co-authored-by: mxlol233 <mxlol233@outlook.com>
2 years agoformat: Fix git whitespace errors
Arthur Cohen [Sat, 10 Dec 2022 07:58:58 +0000 (08:58 +0100)] 
format: Fix git whitespace errors

2 years agorust: add bound parsing in parse_generic_arg.
mxlol233 [Wed, 4 Jan 2023 13:21:59 +0000 (21:21 +0800)] 
rust: add bound parsing in parse_generic_arg.

Signed-off-by: Xiao Ma <mxlol233@outlook.com>
2 years agoCheck for mutable references in const functions
Dave [Mon, 19 Dec 2022 16:59:00 +0000 (10:59 -0600)] 
Check for mutable references in const functions

Use StackedContext instead. Fix error string

Signed-off-by: Dave Evans <dave@dmetwo.org>
(Squashed commits) Check for mutable references in const functions using StackedContext

Signed-off-by: Dave Evans <dave@dmetwo.org>
2 years agounsafe: check use of `target_feature` attribute
Prajwal S N [Sat, 31 Dec 2022 07:19:02 +0000 (12:49 +0530)] 
unsafe: check use of `target_feature` attribute

The `target_feature` attribute is for conditional compilation and may or
may not compile on all platforms. Using it requires an unsafe function
or block.

Signed-off-by: Prajwal S N <prajwalnadig21@gmail.com>
2 years agoMerge #1706
bors[bot] [Fri, 16 Dec 2022 12:46:03 +0000 (12:46 +0000)] 
Merge #1706

1706: Add math intrinsics r=CohenArthur a=tamaroning

Addresses https://github.com/Rust-GCC/gccrs/issues/658
Added math intrinsic functions.

Co-authored-by: Raiki Tamura <tamaron1203@gmail.com>
2 years agofatal_error_flag: Fix typo in error message
Arthur Cohen [Fri, 16 Dec 2022 12:38:36 +0000 (13:38 +0100)] 
fatal_error_flag: Fix typo in error message

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

2 years agoMerge #1700
bors[bot] [Thu, 15 Dec 2022 14:13:33 +0000 (14:13 +0000)] 
Merge #1700

1700: Merge upstream, last commit before GCC/Rust upstreaming r=CohenArthur a=tschwinge

Co-authored-by: Eric Botcazou <ebotcazou@adacore.com>
Co-authored-by: Richard Biener <rguenther@suse.de>
Co-authored-by: Patrick Palka <ppalka@redhat.com>
Co-authored-by: Jonathan Wakely <jwakely@redhat.com>
Co-authored-by: Harald Anlauf <anlauf@gmx.de>
Co-authored-by: Ian Lance Taylor <iant@golang.org>
Co-authored-by: GCC Administrator <gccadmin@gcc.gnu.org>
Co-authored-by: David Malcolm <dmalcolm@redhat.com>
Co-authored-by: Lulu Cheng <chenglulu@loongson.cn>
Co-authored-by: Alexandre Oliva <oliva@adacore.com>
Co-authored-by: Paul-Antoine Arras <pa@codesourcery.com>
Co-authored-by: Tobias Burnus <tobias@codesourcery.com>
Co-authored-by: Jakub Jelinek <jakub@redhat.com>
Co-authored-by: Martin Liska <mliska@suse.cz>
Co-authored-by: Iskander Shakirzyanov <iskander@ispras.ru>
Co-authored-by: Iain Buclaw <ibuclaw@gdcproject.org>
Co-authored-by: Kyrylo Tkachov <kyrylo.tkachov@arm.com>
Co-authored-by: John David Anglin <danglin@gcc.gnu.org>
2 years agoAdjust '.github/bors_log_expected_warnings'
Thomas Schwinge [Thu, 15 Dec 2022 13:52:24 +0000 (14:52 +0100)] 
Adjust '.github/bors_log_expected_warnings'

2 years agoMerge #1704
bors[bot] [Thu, 15 Dec 2022 09:06:54 +0000 (09:06 +0000)] 
Merge #1704

1704: rust: fix link serialization [PR108113] r=CohenArthur a=dkm

The Make-lang.in was missing the link serialization support.

    PR rust/108113

gcc/rust
* Make-lang.in (rust.serial): New variable.
(rust1$(exeext)): Depend on $(rust.prev). Call LINK_PROGRESS.

Signed-off-by: Marc Poulhiès <dkm@kataplop.net>
Co-authored-by: Marc Poulhiès <dkm@kataplop.net>
2 years agorust: fix link serialization [PR108113]
Marc Poulhiès [Wed, 14 Dec 2022 20:29:13 +0000 (21:29 +0100)] 
rust: fix link serialization [PR108113]

The Make-lang.in was missing the link serialization support.

    PR rust/108113

gcc/rust
* Make-lang.in (rust.serial): New variable.
(rust1$(exeext)): Depend on $(rust.prev). Call LINK_PROGRESS.

Signed-off-by: Marc Poulhiès <dkm@kataplop.net>
2 years agoAdjust for "Make Warray-bounds alias to Warray-bounds= [PR107787]"
Thomas Schwinge [Wed, 14 Dec 2022 09:33:24 +0000 (10:33 +0100)] 
Adjust for "Make Warray-bounds alias to Warray-bounds= [PR107787]"

See GCC upstream commit 7c01d029fca669263b9c2dcb8837c42f7ae3a77f
"Make Warray-bounds alias to Warray-bounds= [PR107787]".

2 years agoMerge commit '3b89428c0d5710c8093055b3d92c543888759f93' into HEAD
Thomas Schwinge [Wed, 14 Dec 2022 16:30:07 +0000 (17:30 +0100)] 
Merge commit '3b89428c0d5710c8093055b3d92c543888759f93' into HEAD

2 years agoMerge commit '3d6dbb6fc5d1d14bf36a879b6f4a00ae91090a63' into HEAD
Thomas Schwinge [Wed, 14 Dec 2022 16:27:01 +0000 (17:27 +0100)] 
Merge commit '3d6dbb6fc5d1d14bf36a879b6f4a00ae91090a63' into HEAD

2 years agoMerge #1703
bors[bot] [Wed, 14 Dec 2022 14:46:30 +0000 (14:46 +0000)] 
Merge #1703

1703: Backport "c++: Quash -Wdangling-reference for member operator* [PR107488]" r=tschwinge a=tschwinge

As had also been reported in <https://gcc.gnu.org/PR107633> "Bootstrap failure due to -Werror=unused-parameter and -Werror=dangling-reference", GCC `--enable-bootstrap` build is currently broken:

    [...]/gcc/rust/backend/rust-compile-expr.cc: In member function â€˜tree_node* Rust::Compile::CompileExpr::resolve_method_address(Rust::TyTy::FnType*, Rust::HirId, Rust::TyTy::BaseType*, Rust::HIR::PathIdentSegment&, Rust::Analysis::NodeMapping, Location)’:
    [...]/gcc/rust/backend/rust-compile-expr.cc:2019:13: error: possibly dangling reference to a temporary [-Werror=dangling-reference]
     2019 |       auto &candidate = *candidates.begin ();
          |             ^~~~~~~~~
    [...]/gcc/rust/backend/rust-compile-expr.cc:2019:44: note: the temporary was destroyed at the end of the full expression â€˜candidates.std::set<Rust::Resolver::PathProbeCandidate>::begin().std::_Rb_tree_const_iterator<Rust::Resolver::PathProbeCandidate>::operator*()’
     2019 |       auto &candidate = *candidates.begin ();
          |                                            ^
    [...]/gcc/rust/backend/rust-compile-expr.cc: In member function â€˜tree_node* Rust::Compile::CompileExpr::generate_closure_fntype(Rust::HIR::ClosureExpr&, const Rust::TyTy::ClosureType&, tree, Rust::TyTy::FnType**)’:
    [...]/gcc/rust/backend/rust-compile-expr.cc:3034:35: error: possibly dangling reference to a temporary [-Werror=dangling-reference]
     3034 |   const TyTy::TypeBoundPredicate &predicate
          |                                   ^~~~~~~~~
    [...]/gcc/rust/backend/rust-compile-expr.cc:3035:52: note: the temporary was destroyed at the end of the full expression â€˜(&(& closure_tyty)->Rust::TyTy::ClosureType::<anonymous>.Rust::TyTy::BaseType::<anonymous>.Rust::TyTy::TypeBoundsMappings::get_specified_bounds())->std::vector<Rust::TyTy::TypeBoundPredicate>::begin().__gnu_cxx::__normal_iterator<const Rust::TyTy::TypeBoundPredicate*, std::vector<Rust::TyTy::TypeBoundPredicate> >::operator*()’
     3035 |     = *closure_tyty.get_specified_bounds ().begin ();
          |                                                    ^

    [...]/gcc/rust/typecheck/rust-hir-type-check-path.cc: In member function â€˜void Rust::Resolver::TypeCheckExpr::resolve_segments(Rust::NodeId, std::vector<Rust::HIR::PathExprSegment>&, size_t, Rust::TyTy::BaseType*, const Rust::Analysis::NodeMapping&, Location)’:
    [...]/gcc/rust/typecheck/rust-hir-type-check-path.cc:340:13: error: possibly dangling reference to a temporary [-Werror=dangling-reference]
      340 |       auto &candidate = *candidates.begin ();
          |             ^~~~~~~~~
    [...]/gcc/rust/typecheck/rust-hir-type-check-path.cc:340:44: note: the temporary was destroyed at the end of the full expression â€˜candidates.std::set<Rust::Resolver::PathProbeCandidate>::begin().std::_Rb_tree_const_iterator<Rust::Resolver::PathProbeCandidate>::operator*()’
      340 |       auto &candidate = *candidates.begin ();
          |                                            ^

    [...]/gcc/rust/typecheck/rust-hir-type-check-type.cc: In member function â€˜Rust::TyTy::BaseType* Rust::Resolver::TypeCheckType::resolve_segments(Rust::NodeId, Rust::HirId, std::vector<std::unique_ptr<Rust::HIR::TypePathSegment> >&, size_t, Rust::TyTy::BaseType*, const Rust::Analysis::NodeMapping&, Location)’:
    [...]/gcc/rust/typecheck/rust-hir-type-check-type.cc:465:13: error: possibly dangling reference to a temporary [-Werror=dangling-reference]
      465 |       auto &candidate = *candidates.begin ();
          |             ^~~~~~~~~
    [...]/gcc/rust/typecheck/rust-hir-type-check-type.cc:465:44: note: the temporary was destroyed at the end of the full expression â€˜candidates.std::set<Rust::Resolver::PathProbeCandidate>::begin().std::_Rb_tree_const_iterator<Rust::Resolver::PathProbeCandidate>::operator*()’
      465 |       auto &candidate = *candidates.begin ();
          |                                            ^

I understand this code has been changed in the GCC/Rust upstream submission; but in order to make progress with #1700, I'd like to first individually backport "c++: Quash -Wdangling-reference for member operator* [PR107488]", to resolve this issue here.

Co-authored-by: Marek Polacek <polacek@redhat.com>
2 years agoc++: Quash -Wdangling-reference for member operator* [PR107488]
Marek Polacek [Tue, 1 Nov 2022 21:05:52 +0000 (17:05 -0400)] 
c++: Quash -Wdangling-reference for member operator* [PR107488]

-Wdangling-reference complains here:

  std::vector<int> v = ...;
  std::vector<int>::const_iterator it = v.begin();
  while (it != v.end()) {
    const int &r = *it++; // warning
  }

because it sees a call to
__gnu_cxx::__normal_iterator<const int*, std::vector<int> >::operator*
which returns a reference and its argument is a TARGET_EXPR representing
the result of
__gnu_cxx::__normal_iterator<const int*, std::vector<int> >::operator++
But 'r' above refers to one of the int elements of the vector 'v', not
to a temporary object.  Therefore the warning is a false positive.

I suppose code like the above is relatively common (the warning broke
cppunit-1.15.1 and a few other projects), so presumably it makes sense
to suppress the warning when it comes to member operator*.  In this case
it's defined as

      reference
      operator*() const _GLIBCXX_NOEXCEPT
      { return *_M_current; }

and I'm guessing a lot of member operator* are like that, at least when
it comes to iterators.  I've looked at _Fwd_list_iterator,
_Fwd_list_const_iterator, __shared_ptr_access, _Deque_iterator,
istream_iterator, etc, and they're all like that, so adding #pragmas
would be quite tedious.  :/

PR c++/107488

gcc/cp/ChangeLog:

* call.cc (do_warn_dangling_reference): Quash -Wdangling-reference
for member operator*.

gcc/testsuite/ChangeLog:

* g++.dg/warn/Wdangling-reference5.C: New test.

(cherry picked from commit 32a06ce38a38bf37db468f0e6c83520fcc221534)

2 years agoMerge #1701
bors[bot] [Wed, 14 Dec 2022 11:51:46 +0000 (11:51 +0000)] 
Merge #1701

1701: Standardize warning flags r=tschwinge a=tschwinge

Bring in #1670, revert #1623 and parts of #1585.

Co-authored-by: Thomas Schwinge <thomas@codesourcery.com>
2 years agoReally fix up '.github/bors_log_expected_warnings'
Thomas Schwinge [Wed, 14 Dec 2022 10:25:45 +0000 (11:25 +0100)] 
Really fix up '.github/bors_log_expected_warnings'

2 years agoRevert "bors: Fix warning list"
Thomas Schwinge [Wed, 14 Dec 2022 09:14:55 +0000 (10:14 +0100)] 
Revert "bors: Fix warning list"

This reverts #1585 commit 94d11161c1abe8927f571aedbf39871f21ccf73a.

Conflicts:
.github/bors_log_expected_warnings
... manually resolved and adjusted; let's see...

2 years agoRevert "ci: Apply warnings in CI"
Thomas Schwinge [Wed, 14 Dec 2022 08:45:58 +0000 (09:45 +0100)] 
Revert "ci: Apply warnings in CI"

As discussed in
<https://inbox.sourceware.org/gcc-patches/871qpjtmd8.fsf@euler.schwinge.homeip.net>:

> '-Werror=overloaded-virtual' is implied as by default, we have
> '-Woverloaded-virtual' and '-Werror' [for '--enable-bootstrap' builds].
> ([...])
> (Maybe that isn't active for '--disable-bootstrap' builds, but that's
> "OK".)

For '--disable-bootstrap' builds, we still have '-Woverloaded-virtual', and any
new such diagnostics will be caught by the #1026 "check for new warnings"
machinery, so effectively that does implement '-Werror', too.

> '-Wno-unused-parameter' [did] move into
> 'rust-warn'

This reverts #1585 commit a32ef7aa18c45e7047f539b11cd572f0f9502b6d.

2 years agoRevert "ci: Use same CXXFLAGS in bootstrap workflow"
Thomas Schwinge [Wed, 14 Dec 2022 08:39:44 +0000 (09:39 +0100)] 
Revert "ci: Use same CXXFLAGS in bootstrap workflow"

As discussed in
<https://inbox.sourceware.org/gcc-patches/871qpjtmd8.fsf@euler.schwinge.homeip.net>:

> '-Werror=overloaded-virtual' is implied as by default, we have
> '-Woverloaded-virtual' and '-Werror'.

> '-Wno-unused-parameter' [did] move into
> 'rust-warn'

This reverts #1623 commit b3222881f443f2b09e2dd72699def43d5ae928ba.

2 years ago'rust-warn += -Wno-unused-parameter'
Thomas Schwinge [Sun, 20 Nov 2022 23:01:20 +0000 (00:01 +0100)] 
'rust-warn += -Wno-unused-parameter'

(cherry picked from #1670 commit 7ceb5e29c80c1fc91e208ae6955a22b0b73a2e6b)

2 years agoMerge commit 'b4fddbe9592e9feb37ce567d90af822b75995531' into HEAD
Thomas Schwinge [Tue, 13 Dec 2022 21:44:33 +0000 (22:44 +0100)] 
Merge commit 'b4fddbe9592e9feb37ce567d90af822b75995531' into HEAD

2 years agogccrs: Add README, CONTRIBUTING and compiler logo
Philip Herron [Tue, 23 Aug 2022 15:45:19 +0000 (16:45 +0100)] 
gccrs: Add README, CONTRIBUTING and compiler logo

We still need to write out a documentation section, but these READMEs will
help in the meantime.

gcc/rust/
* CONTRIBUTING.md: New.
* README.md: New.
* logo.png: New.

2 years agogccrs: Add config-lang.in
Philip Herron [Tue, 23 Aug 2022 15:39:44 +0000 (16:39 +0100)] 
gccrs: Add config-lang.in

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: New.

2 years agogccrs: Add fatal_error when experimental flag is not present
Arthur Cohen [Mon, 28 Nov 2022 17:22:34 +0000 (18:22 +0100)] 
gccrs: Add fatal_error when experimental flag is not present

This commits ports over the flag/env variable checking from #1540 which only
allows compilation using gccrs if a certain flag is specified

gcc/rust/
* lang.opt (-frust-incomplete-and-experimental-compiler-do-not-use):
New.
* rust-session-manager.cc (Session::compile_crate): Check it.
* Make-lang.in (RUST_SELFTEST_FLAGS): Add it.
gcc/testsuite/
* lib/rust.exp (rust_init): Add
'-frust-incomplete-and-experimental-compiler-do-not-use'.

2 years agogccrs: Add GCC Rust front-end Make-lang.in
Philip Herron [Tue, 23 Aug 2022 15:39:33 +0000 (16:39 +0100)] 
gccrs: Add GCC Rust front-end Make-lang.in

This is the Makefile for our front-end.

gcc/rust/
* Make-lang.in: New.

2 years agogccrs: Add lang.opt
Philip Herron [Tue, 23 Aug 2022 15:41:00 +0000 (16:41 +0100)] 
gccrs: Add lang.opt

We have some Rust-specific language options. Note that -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++'s no-discard for Rust's
must-use attribute, so we have enabled these by default directly here.

gcc/rust/
* lang.opt: New.

2 years agogccrs: Add lang-spec.h
Philip Herron [Tue, 23 Aug 2022 15:40:07 +0000 (16:40 +0100)] 
gccrs: Add lang-spec.h

This specifies the extensions of the Rust language.

gcc/rust/
* lang-specs.h: New.

2 years agogccrs: Compiler proper interface kicks off the pipeline
Philip Herron [Tue, 23 Aug 2022 15:44:42 +0000 (16:44 +0100)] 
gccrs: Compiler proper interface kicks off the pipeline

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 missing piece here is that we are using saw_errors() to return
early which is unnecessary but as our error handling has been improving
over time we will start to take advantage of error node in our type system
as well as error_mark_node from GCC. The caveat being that our lints/checks
expect no errors and will throw an assertion.

gcc/rust/
* rust-lang.cc: New.
* rust-session-manager.cc: New.
* rust-session-manager.h: New.

2 years agogccrs: Add compiler driver
Philip Herron [Tue, 23 Aug 2022 15:41:31 +0000 (16:41 +0100)] 
gccrs: Add compiler driver

Our compiler driver is fairly 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 over loading the
other source files to include them in the crate.

gcc/rust/
* rustspec.cc: New.

2 years agogccrs: These are wrappers ported from reusing gccgo
Philip Herron [Wed, 24 Aug 2022 11:08:58 +0000 (12:08 +0100)] 
gccrs: These are wrappers ported from reusing gccgo

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: New.
* rust-diagnostics.h: New.
* rust-gcc-diagnostics.cc: New.
* rust-linemap.cc: New.
* rust-linemap.h: New.
* rust-location.h: New.
* rust-system.h: New.

2 years agogccrs: Add HIR to GCC GENERIC lowering entry point
Philip Herron [Fri, 21 Oct 2022 12:29:50 +0000 (14:29 +0200)] 
gccrs: Add HIR to GCC GENERIC lowering entry point

This patch contains the entry point and utilities used for the lowering
of HIR nodes to `tree`s. It also contains a constant evaluator, ported
over from the C++ frontend.

gcc/rust/
* backend/rust-compile-context.cc: New.
* backend/rust-compile-context.h: New.
* backend/rust-compile.cc: New.
* backend/rust-compile.h: New.
* backend/rust-constexpr.cc: New.
* backend/rust-constexpr.h: New.

Co-authored-by: David Faust <david.faust@oracle.com>
Co-authored-by: Faisal Abbas <90.abbasfaisal@gmail.com>
Signed-off-by: Faisal Abbas <90.abbasfaisal@gmail.com>
2 years agogccrs: Add HIR to GCC GENERIC lowering for all nodes
Philip Herron [Fri, 21 Oct 2022 12:27:56 +0000 (14:27 +0200)] 
gccrs: Add HIR to GCC GENERIC lowering for all nodes

This patch implements the lowering mentioned in the previous patch for all HIR nodes.

gcc/rust/
* backend/rust-compile-block.cc: New.
* backend/rust-compile-block.h: New.
* backend/rust-compile-expr.cc: New.
* backend/rust-compile-expr.h: New.
* backend/rust-compile-extern.h: New.
* backend/rust-compile-fnparam.cc: New.
* backend/rust-compile-fnparam.h: New.
* backend/rust-compile-implitem.cc: New.
* backend/rust-compile-implitem.h: New.
* backend/rust-compile-intrinsic.cc: New.
* backend/rust-compile-intrinsic.h: New.
* backend/rust-compile-item.cc: New.
* backend/rust-compile-item.h: New.
* backend/rust-compile-pattern.cc: New.
* backend/rust-compile-pattern.h: New.
* backend/rust-compile-resolve-path.cc: New.
* backend/rust-compile-resolve-path.h: New.
* backend/rust-compile-stmt.cc: New.
* backend/rust-compile-stmt.h: New.
* backend/rust-compile-struct-field-expr.cc: New.
* backend/rust-compile-struct-field-expr.h: New.
* backend/rust-compile-type.cc: New.
* backend/rust-compile-type.h: New.
* backend/rust-compile-var-decl.h: New.

Co-authored-by: David Faust <david.faust@oracle.com>
2 years agogccrs: Add base for HIR to GCC GENERIC lowering
Philip Herron [Fri, 21 Oct 2022 12:01:04 +0000 (14:01 +0200)] 
gccrs: Add base for HIR to GCC GENERIC lowering

This pass walks the HIR crate and turns them into GCC `tree`s. We do not have
any Rust specific tree's. We are slowly removing the backend abstraction
which was ported over from gccgo in favour of using `tree`s directly.

gcc/rust/
* backend/rust-builtins.h: New.
* backend/rust-compile-base.cc: New.
* backend/rust-compile-base.h: New.
* backend/rust-mangle.cc: New.
* backend/rust-mangle.h: New.
* backend/rust-tree.cc: New.
* backend/rust-tree.h: New.
* rust-backend.h: New.
* rust-gcc.cc: New.

Co-authored-by: David Faust <david.faust@oracle.com>
2 years agogccrs: Add metadata output pass
Philip Herron [Tue, 23 Aug 2022 15:36:29 +0000 (16:36 +0100)] 
gccrs: Add metadata output pass

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 will now contain extra data inside
.rust-export section inside the object file which will be preserved inside
archives and shared objects. When we have another application which uses
this library 'mylib'.

  extern crate mylib;
  use mylib::foo;

  fn main() {
    foo();
  }

We compile using:

  gcc -g -O2 -frust-crate=test -c src/main.rs -o src/main.o

When the extern crate line is hit the front-end will look for mylib.o,
libmylib.a, mylib.rox. If it finds a raw object file it will read the
.rust-export section directly from the object for the public metadata
such as public functions, types constants etc. If it fails to find an
object it might find .rox which is the objdump of the .rust-export to a
raw file, it might even find libmylib.a and read the export directly out
of the archive file reusing code from gccgo to do so.

The full compiler pipeline is reused here, so the metatadata is actually
just real rust code. The benifit here is that Rust supports exporting,
macros and generics so this requires the name-resolution and type info
all to be generated and inserted into the apropriate context classes. Since
the metadata is real rust code it means we can reuse the full pipeline to
generate the code as necessary. So for the simple case of a public struct
we simply emit the AST dump of this struct directly into the metadata. If
its a non-generic public function we emit and extern rust abi block for
that function. If its a trait we can simply emit the trait with the public
memebers. Generics are more complicated since we need to emit the function
fully for it to be compiled correctly this still needs tests to be added.
The hardest part is non generic impl blocks which is still a WIP.

To finally link the two crates together you run:

  gcc -g -O2 -o rust-program.exe src/main.o src/mylib.o

gcc/rust/
* metadata/rust-export-metadata.cc: New.
* metadata/rust-export-metadata.h: New.
* metadata/rust-extern-crate.cc: New.
* metadata/rust-extern-crate.h: New.
* metadata/rust-import-archive.cc: New.
* metadata/rust-imports.cc: New.
* metadata/rust-imports.h: New.
* rust-object-export.cc: New.
* rust-object-export.h: New.

2 years agogccrs: Add unused variable scan
Philip Herron [Tue, 23 Aug 2022 15:35:44 +0000 (16:35 +0100)] 
gccrs: Add unused variable scan

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: New.
* checks/lints/rust-lint-unused-var.h: New.

2 years agogccrs: Add dead code scan on HIR
Thomas Young [Tue, 23 Aug 2022 15:34:35 +0000 (16:34 +0100)] 
gccrs: Add dead code scan on HIR

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.

gcc/rust/
* checks/lints/rust-lint-marklive-base.h: New.
* checks/lints/rust-lint-marklive.cc: New.
* checks/lints/rust-lint-marklive.h: New.
* checks/lints/rust-lint-scan-deadcode.h: New.

2 years agogccrs: Add privacy checks
Arthur Cohen [Tue, 23 Aug 2022 15:32:26 +0000 (16:32 +0100)] 
gccrs: Add privacy checks

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 item with
various qualifiers such as `pub` to publicly expose an item. Furthermore,
a module path can be given to `pub` to restrict an item's privacy to a
certain module: These paths need to be resolved and later on checked by
the privacy error reporter.

gcc/rust/
* checks/errors/privacy/rust-privacy-check.cc: New.
* checks/errors/privacy/rust-privacy-check.h: New.
* checks/errors/privacy/rust-privacy-common.h: New.
* checks/errors/privacy/rust-privacy-ctx.cc: New.
* checks/errors/privacy/rust-privacy-ctx.h: New.
* checks/errors/privacy/rust-privacy-reporter.cc: New.
* checks/errors/privacy/rust-privacy-reporter.h: New.
* checks/errors/privacy/rust-pub-restricted-visitor.cc: New.
* checks/errors/privacy/rust-pub-restricted-visitor.h: New.
* checks/errors/privacy/rust-reachability.cc: New.
* checks/errors/privacy/rust-reachability.h: New.
* checks/errors/privacy/rust-visibility-resolver.cc: New.
* checks/errors/privacy/rust-visibility-resolver.h: New.

2 years agogccrs: Add const checker
Arthur Cohen [Tue, 23 Aug 2022 15:31:55 +0000 (16:31 +0100)] 
gccrs: Add const checker

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 follow:

- Array type length expressions
- Array repeat length expressions
- Constants
- Statics
- Enum discriminants
- Const generic arguments

In these contexts, the user is restricted to calling only functions marked
as `const` or perform arithmetic operations only on certain types, among
other restrictions.

gcc/rust/
* checks/errors/rust-const-checker.cc: New.
* checks/errors/rust-const-checker.h: New.

2 years agogccrs: Add unsafe checks for Rust
Arthur Cohen [Tue, 23 Aug 2022 15:31:17 +0000 (16:31 +0100)] 
gccrs: Add unsafe checks for Rust

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 perform more actions
than regular safe Rust code. These actions currently include:

- Dereferencing raw pointers
- Calls to unsafe functions
- Use of inline assembly
- Use of mutable static
- Use of extern static
- Access to a union's field
- Call to functions with #[target(feature)] attribute
- Initializing type with rustc_layout_scalar_valid_range attribute
- Mutation of layout constrained field
- Borrow of layout constrained field

gcc/rust/
* checks/errors/rust-unsafe-checker.cc: New.
* checks/errors/rust-unsafe-checker.h: New.

2 years agogccrs: Add remaining type system transformations
Philip Herron [Fri, 21 Oct 2022 11:55:28 +0000 (13:55 +0200)] 
gccrs: Add remaining type system transformations

This patch implements multiple transformation performed on the HIR
during type-resolution such as type coercion, casts, auto-dereferencement.

gcc/rust/
* typecheck/rust-autoderef.cc: New.
* typecheck/rust-autoderef.h: New.
* typecheck/rust-casts.cc: New.
* typecheck/rust-casts.h: New.
* typecheck/rust-coercion.cc: New.
* typecheck/rust-coercion.h: New.
* typecheck/rust-hir-dot-operator.cc: New.
* typecheck/rust-hir-dot-operator.h: New.
* typecheck/rust-hir-inherent-impl-overlap.h: New.
* typecheck/rust-hir-path-probe.h: New.
* typecheck/rust-hir-trait-ref.h: New.
* typecheck/rust-hir-type-bounds.h: New.
* typecheck/rust-substitution-mapper.cc: New.
* typecheck/rust-substitution-mapper.h: New.
* typecheck/rust-tycheck-dump.h: New.
* typecheck/rust-tyctx.cc: New.
* typecheck/rust-tyty-bounds.cc: New.
* typecheck/rust-tyty-call.cc: New.
* typecheck/rust-tyty-call.h: New.
* typecheck/rust-tyty-cmp.h: New.
* typecheck/rust-tyty-rules.h: New.

2 years agogccrs: Add Rust type information
Philip Herron [Fri, 21 Oct 2022 11:53:58 +0000 (13:53 +0200)] 
gccrs: Add Rust type information

Contains abstractions over Rust's types, used when performing the
HIR's type-resolution.

gcc/rust/
* typecheck/rust-tyty.cc: New.
* typecheck/rust-tyty.h: New.

2 years agogccrs: Add type resolution and trait solving pass
Philip Herron [Fri, 21 Oct 2022 11:53:14 +0000 (13:53 +0200)] 
gccrs: Add type resolution and trait solving pass

This serves to handle parts of the Rust type-system. Namely, the type
resolution (similar to type-checking) and the trait solving algorithms
(which ensure Rust's type contracts are upheld throughout the codebase).

gcc/rust/
* typecheck/rust-hir-trait-resolve.cc: New.
* typecheck/rust-hir-trait-resolve.h: New.
* typecheck/rust-hir-type-check-base.cc: New.
* typecheck/rust-hir-type-check-base.h: New.
* typecheck/rust-hir-type-check-enumitem.cc: New.
* typecheck/rust-hir-type-check-enumitem.h: New.
* typecheck/rust-hir-type-check-expr.cc: New.
* typecheck/rust-hir-type-check-expr.h: New.
* typecheck/rust-hir-type-check-implitem.cc: New.
* typecheck/rust-hir-type-check-implitem.h: New.
* typecheck/rust-hir-type-check-item.cc: New.
* typecheck/rust-hir-type-check-item.h: New.
* typecheck/rust-hir-type-check-path.cc: New.
* typecheck/rust-hir-type-check-pattern.cc: New.
* typecheck/rust-hir-type-check-pattern.h: New.
* typecheck/rust-hir-type-check-stmt.cc: New.
* typecheck/rust-hir-type-check-stmt.h: New.
* typecheck/rust-hir-type-check-struct-field.h: New.
* typecheck/rust-hir-type-check-struct.cc: New.
* typecheck/rust-hir-type-check-toplevel.cc: New.
* typecheck/rust-hir-type-check-toplevel.h: New.
* typecheck/rust-hir-type-check-type.cc: New.
* typecheck/rust-hir-type-check-type.h: New.
* typecheck/rust-hir-type-check-util.cc: New.
* typecheck/rust-hir-type-check-util.h: New.
* typecheck/rust-hir-type-check.cc: New.
* typecheck/rust-hir-type-check.h: New.
* typecheck/rust-tyty-visitor.h: New.

2 years agogccrs: Add helpers mappings canonical path and lang items
Philip Herron [Tue, 23 Aug 2022 15:29:11 +0000 (16:29 +0100)] 
gccrs: Add helpers mappings canonical path and lang items

These are various helper classes used in the compiler pipeline.

gcc/rust/
* util/rust-canonical-path.h: New.
* util/rust-common.h: New.
* util/rust-hir-map.cc: New.
* util/rust-hir-map.h: New.
* util/rust-identifier.h: New.
* util/rust-lang-item.h: New.
* util/rust-mapping-common.h: New.
* util/rust-stacked-contexts.h: New.

2 years agogccrs: Add attributes checker
Arthur Cohen [Tue, 23 Aug 2022 15:27:23 +0000 (16:27 +0100)] 
gccrs: Add attributes checker

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 its
responsibilities is to make sure that arguments given to built-in
attributes are correct, or contain the correct type of information. This
visitor also checks that an attribute is allowed to be used in the current
particular context.

gcc/rust/
* util/rust-attributes.cc: New.
* util/rust-attributes.h: New.

2 years agogccrs: Add implementation of Optional
Arthur Cohen [Tue, 23 Aug 2022 15:26:37 +0000 (16:26 +0100)] 
gccrs: Add implementation of Optional

This adds an Optional<T> class to improve error handling.

gcc/rust/
* util/rust-optional-test.cc: New.
* util/rust-optional.h: New.

2 years agogccrs: Add Base62 implementation
Arthur Cohen [Tue, 23 Aug 2022 15:26:01 +0000 (16:26 +0100)] 
gccrs: Add Base62 implementation

Used for V0 symbol mangling scheme which is still in development.

gcc/rust/
* util/rust-base62.cc: New.
* util/rust-base62.h: New.

2 years agogccrs: Add Rust ABI enum helpers
Philip Herron [Tue, 23 Aug 2022 15:23:22 +0000 (16:23 +0100)] 
gccrs: Add Rust ABI enum helpers

This is a simple helper over an enum of possible ABI options in Rust.

gcc/rust/
* util/rust-abi.cc: New.
* util/rust-abi.h: New.

2 years agogccrs: Add port of FNV hash used during legacy symbol mangling
Philip Herron [Tue, 23 Aug 2022 15:22:47 +0000 (16:22 +0100)] 
gccrs: Add port of FNV hash used during legacy symbol mangling

This hash was ported from the Go runtime, as we needed a hash for the legacy
symbol mangling system. All symbols in Rust contain a hash of some
metadata for uniqueness on generic functions.

gcc/rust/
* util/fnv-hash.h: New.

2 years agogccrs: Add wrapper for make_unique
Philip Herron [Tue, 23 Aug 2022 15:22:22 +0000 (16:22 +0100)] 
gccrs: Add wrapper for make_unique

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: New.

2 years agogccrs: Add AST to HIR lowering pass
Philip Herron [Tue, 23 Aug 2022 15:20:05 +0000 (16:20 +0100)] 
gccrs: Add AST to HIR lowering pass

This performs the lowering of the AST to HIR. The interesting piece here is
that we desugar much of the AST as mentioned in the previous pass, but
crucially, we also strip out all code that is "marked-for-strip" which failed
cfg-expansion from the expansion pass. After this, the HIR includes all code
required to compile for this crate.

gcc/rust/
* hir/rust-ast-lower-base.cc: New.
* hir/rust-ast-lower-base.h: New.
* hir/rust-ast-lower-block.h: New.
* hir/rust-ast-lower-enumitem.h: New.
* hir/rust-ast-lower-expr.h: New.
* hir/rust-ast-lower-extern.h: New.
* hir/rust-ast-lower-implitem.h: New.
* hir/rust-ast-lower-item.cc: New.
* hir/rust-ast-lower-item.h: New.
* hir/rust-ast-lower-pattern.cc: New.
* hir/rust-ast-lower-pattern.h: New.
* hir/rust-ast-lower-stmt.h: New.
* hir/rust-ast-lower-struct-field-expr.h: New.
* hir/rust-ast-lower-type.h: New.
* hir/rust-ast-lower.cc: New.
* hir/rust-ast-lower.h: New.
* hir/rust-hir-dump.cc: New.
* hir/rust-hir-dump.h: New.