]> git.ipfire.org Git - thirdparty/gcc.git/log
thirdparty/gcc.git
12 months agoProperly striping struct fields when using attrs
Antonio Gomes [Fri, 19 Jul 2024 01:50:54 +0000 (22:50 -0300)] 
Properly striping struct fields when using attrs

gcc/rust/ChangeLog:
* expand/rust-cfg-strip.cc:
Strip struct expr fields and strip fields in struct definition
* expand/rust-cfg-strip.h:
Signatures for new function maybe_strip_struct_expr_fields

gcc/testsuite/ChangeLog:
* rust/compile/macro-issue2983_2984.rs:
Add test to check for correct stripped fields

Signed-off-by: Antonio Gomes <antoniospg100@gmail.com>
12 months agogccrs: [E0576] Associated `item` not found in given `type`
Muhammad Mahad [Fri, 19 Jul 2024 13:42:03 +0000 (13:42 +0000)] 
gccrs: [E0576] Associated `item` not found in given `type`

gcc/rust/ChangeLog:

* typecheck/rust-hir-type-check-type.cc (TypeCheckType::visit):
Add rich error message and error code similiar to rustc with
associaed type and trait name

gcc/testsuite/ChangeLog:

* rust/compile/unknown-associated-item.rs: New test.

Signed-off-by: Muhammad Mahad <mahadtxt@gmail.com>
12 months agoChange bug report issue template
Pierre-Emmanuel Patry [Mon, 22 Jul 2024 13:00:55 +0000 (15:00 +0200)] 
Change bug report issue template

ChangeLog:

* .github/ISSUE_TEMPLATE/bug_report.yml: New file.
* .github/ISSUE_TEMPLATE/bug_report.md: Deleted old template.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
12 months ago[#2987] Patch ICE when deriving Clone and Copy
Liam Naddell [Fri, 19 Jul 2024 18:19:26 +0000 (14:19 -0400)] 
[#2987] Patch ICE when deriving Clone and Copy

gcc/rust/ChangeLog:
* expand/rust-expand-visitor.cc:
Fix ICE caused by unique_ptr UB and buggy iterator use

gcc/testsuite/ChangeLog:
* rust/compile/issue-2987.rs:
Add test for deriving Clone and Copy at the same time

Signed-off-by: Liam Naddell <liam.naddell@mail.utoronto.ca>
12 months agoFix ffi and enum conventions
badumbatish [Tue, 23 Jul 2024 20:21:31 +0000 (13:21 -0700)] 
Fix ffi and enum conventions

gcc/rust/ChangeLog:

* ast/rust-fmt.h (enum ParseMode):
Drop typedef in Cpp

libgrust/ChangeLog:

* libformat_parser/generic_format_parser/src/lib.rs:
Remove repr(C)
* libformat_parser/src/bin.rs: Use ffi
* libformat_parser/src/lib.rs: pub ffi, create ParseMode and match
rustc's parse mode

12 months agoAdded options for ParseMode
badumbatish [Sat, 20 Jul 2024 07:44:26 +0000 (00:44 -0700)] 
Added options for ParseMode

gcc/rust/ChangeLog:

* ast/rust-fmt.cc (Pieces::collect):
Added options for ParseMode
* ast/rust-fmt.h (collect_pieces): Likewise.
(struct Pieces): Likewise.
* expand/rust-macro-builtins-format-args.cc (MacroBuiltin::format_args_handler):
Likewise.

libgrust/ChangeLog:

* libformat_parser/generic_format_parser/src/lib.rs: Likewise.
* libformat_parser/src/bin.rs: Likewise.
* libformat_parser/src/lib.rs: Likewise.

12 months agoChange assertion of constructor
badumbatish [Sun, 21 Jul 2024 22:41:21 +0000 (15:41 -0700)] 
Change assertion of constructor

Change the assert of (expr != nullptr) to
(this->expr != nullptr) because we assigned (std::move(expr)) to
this->expr, no need to assert expr

gcc/rust/ChangeLog:

* ast/rust-expr.h (struct AnonConst):
Change assertion of constructor
(struct InlineAsmOperand):
Change assertion of constructor

12 months ago[#3046] ICE on failing to find enum variant
Liam Naddell [Sat, 13 Jul 2024 00:56:08 +0000 (20:56 -0400)] 
[#3046] ICE on failing to find enum variant

gcc/rust/ChangeLog:
* typecheck/rust-hir-type-check-expr.cc:
Fix ICE caused by not finding enum variant by adding new error
message

gcc/testsuite/ChangeLog:
* rust/compile/issue-3046.rs:
Add test for new error message

Signed-off-by: Liam Naddell <liam.naddell@mail.utoronto.ca>
12 months agoFix CI bootstrap build with a nightly rust compiler
Pierre-Emmanuel Patry [Thu, 18 Jul 2024 09:01:55 +0000 (11:01 +0200)] 
Fix CI bootstrap build with a nightly rust compiler

The CI failed to compile some recent code that requires a nightly
feature. This change allows the CI to use a nightly compiler instead.

ChangeLog:

* .github/workflows/bootstrap.yml: Install nightly rustc.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
12 months agoUpdate pattern with \r* for dg-output tests
badumbatish [Wed, 17 Jul 2024 19:00:44 +0000 (12:00 -0700)] 
Update pattern with \r* for dg-output tests

First scan with "rg -v '\\r' gcc/testsuite/rust | rg 'dg-output'"

gcc/testsuite/ChangeLog:

* rust/execute/torture/issue-2187.rs:
Update pattern with \r* for dg-output tests
* rust/execute/xfail/macro1.rs: Likewise

12 months agoImprove error messages for operator expressions
Antonio Gomes [Sun, 14 Jul 2024 04:45:24 +0000 (01:45 -0300)] 
Improve error messages for operator expressions

gcc/rust/ChangeLog:
* hir/tree/rust-hir-expr.h: Add new get_operator_str method in
ArithmeticOrLogicalExpr and CompoundAssignmentExpr
* hir/tree/rust-hir.cc: Likewise
* typecheck/rust-hir-type-check-expr.cc: Improve error message for
operator expressions to display the correct operator symbol

gcc/testsuite/ChangeLog:
* rust/compile/shadow1.rs: Fix test for new error message

Signed-off-by: Antonio Gomes <antoniospg100@gmail.com>
12 months agoIntroduce new class to handle borrow errors
Kushal Pal [Fri, 28 Jun 2024 06:25:52 +0000 (06:25 +0000)] 
Introduce new class to handle borrow errors

gcc/rust/ChangeLog:

* Make-lang.in: Compile new file.
* checks/errors/borrowck/rust-borrow-checker.cc (BorrowChecker::go):
Use new class to report errors.
* checks/errors/borrowck/rust-borrow-checker-diagnostics.cc: New file.
* checks/errors/borrowck/rust-borrow-checker-diagnostics.h:
New file, adds new class.

Signed-off-by: Kushal Pal <kushalpal109@gmail.com>
12 months agoFix nightly rustc warnings
Kushal Pal [Mon, 24 Jun 2024 12:07:30 +0000 (12:07 +0000)] 
Fix nightly rustc warnings

libgrust/ChangeLog:

* libformat_parser/Cargo.toml:
Used crate-type instead of depricated crate_type.
* libformat_parser/generic_format_parser/src/lib.rs:
Remove dead code.
* libformat_parser/src/lib.rs: Likewise.

Signed-off-by: Kushal Pal <kushalpal109@gmail.com>
12 months agoAdded FFIVector to get Polonius output on C++ side
Kushal Pal [Wed, 5 Jun 2024 11:09:10 +0000 (11:09 +0000)] 
Added FFIVector to get Polonius output on C++ side

ChangeLog:

* .github/workflows/ccpp.yml: Switch to nightly version of rustc
to use unstable features, namely extern types for FFI.

gcc/rust/ChangeLog:

* Make-lang.in: Compile new file, rust-polonius.cc
* checks/errors/borrowck/ffi-polonius/src/gccrs_ffi.rs: Opaque
type to represent FFIVector from C++.
* checks/errors/borrowck/ffi-polonius/src/gccrs_ffi_generated.rs:
Change types of fields in Output.
* checks/errors/borrowck/ffi-polonius/src/lib.rs: Added helper
functions to contruct Polonius output on C++ side,
used helpers to contruct Polonius output on C++ side.
* checks/errors/borrowck/polonius/rust-polonius-ffi.h (make_vector):
FFIVector is a wrapper around std::vector for transfering data
from Rust to C++.
(struct Output): Use pointers to FFIVector instead of bool to
store Polonius output data.
* checks/errors/borrowck/polonius/rust-polonius.h (FFIVector__new):
Helper function.
(FFIVector__new_vec_pair): Likewise.
(FFIVector__new_vec_triple): Likewise.
(FFIVector__push): Likewise.
(FFIVector__push_vec_pair): Likewise.
(FFIVector__push_vec_triple): Likewise.
* checks/errors/borrowck/rust-borrow-checker.cc (BorrowChecker::go):
Convert FFIVector to std::vector representation for easier
navigation.
* checks/errors/borrowck/polonius/rust-polonius.cc: New file,
implementation of helper functions.

Signed-off-by: Kushal Pal <kushalpal109@gmail.com>
12 months agorust: fix HIR dump for MatchExpr
Marc Poulhiès [Sun, 30 Jun 2024 21:11:17 +0000 (23:11 +0200)] 
rust: fix HIR dump for MatchExpr

The visitor was still using the as_string() method.

gcc/rust/ChangeLog:

* hir/rust-hir-dump.cc (Dump::do_matcharm): New.
(Dump::do_matchcase): New.
(Dump::visit(MatchExpr)): Adjust, don't use as_string.
* hir/rust-hir-dump.h (Dump::do_matcharm, Dump::do_matchcase): New.

Signed-off-by: Marc Poulhiès <dkm@kataplop.net>
12 months ago[#3051] Remove unnecessary #include from rust-expr.h
Liam Naddell [Tue, 2 Jul 2024 11:44:47 +0000 (07:44 -0400)] 
[#3051] Remove unnecessary #include from rust-expr.h

gcc/rust/ChangeLog:
* ast/rust-expr.h:
Remove unnecessary include.

Signed-off-by: Liam Naddell <liam.naddell@mail.utoronto.ca>
12 months agoPin node16 by allowing old version
badumbatish [Wed, 10 Jul 2024 02:30:45 +0000 (19:30 -0700)] 
Pin node16 by allowing old version

ChangeLog:

* .github/workflows/ccpp.yml:
Pin node16 by allowing old version

13 months agoSafe-guard InlineAsm structs
badumbatish [Mon, 1 Jul 2024 00:37:58 +0000 (17:37 -0700)] 
Safe-guard InlineAsm structs

gcc/rust/ChangeLog:

* ast/rust-expr.h (struct AnonConst):
Safe-guard InlineAsm structs
(struct InlineAsmOperand): Likewise.
* expand/rust-macro-builtins-asm.cc (parse_reg_operand_in):
Likewise.
(parse_reg_operand_out): Likewise.
(parse_reg_operand_inout): Likewise.

Signed-off-by: badumbatish <tanghocle456@gmail.com>
13 months agoStore parse result of parse_format_string(s)
badumbatish [Sun, 30 Jun 2024 00:12:33 +0000 (17:12 -0700)] 
Store parse result of parse_format_string(s)

gcc/rust/ChangeLog:

* ast/rust-expr.h (struct TupleTemplateStr):
Store parse result of parse_format_string(s)
* expand/rust-macro-builtins-asm.cc (parse_format_strings):
Likewise

Signed-off-by: badumbatish <tanghocle456@gmail.com>
13 months agoClean up monadic operations on expected<>
jjasmine [Wed, 26 Jun 2024 14:39:00 +0000 (07:39 -0700)] 
Clean up monadic operations on expected<>

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_asm):
Clean up monadic operations on expected<>

Signed-off-by: badumbatish <tanghocle456@gmail.com>
13 months agoAddresses warning, put warn unused in right place
jjasmine [Wed, 26 Jun 2024 04:29:13 +0000 (21:29 -0700)] 
Addresses warning, put warn unused in right place

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_reg_operand):
Addresses warning, put warn unused in right place
(parse_reg_operand_inout): Likewise.
(parse_asm_arg): Likewise.
* expand/rust-macro-builtins-asm.h (enum WARN_UNUSED_RESULT): Likewise.
(enum InlineAsmParseError): Likewise.
(validate): Likewise.
(parse_asm_arg): Likewise.
(parse_format_strings): Likewise.
(parse_clobber_abi): Likewise.
(parse_reg_operand): Likewise.
(parse_reg_operand_in): Likewise.
(parse_reg_operand_out): Likewise.
(parse_reg_operand_lateout): Likewise.
(parse_reg_operand_inout): Likewise.
(parse_reg_operand_inlateout): Likewise.
(parse_reg_operand_const): Likewise.
(parse_reg_operand_sym): Likewise.
(parse_reg_operand_unexpected): Likewise.
(parse_asm): Likewise.
(check_and_set): Likewise.
(parse_options): Likewise.
(parse_reg): Likewise.
(parse_format_string): Likewise.

Signed-off-by: badumbatish <tanghocle456@gmail.com>
13 months agoAdd WARN_UNUSED_RESULT parse error
jjasmine [Wed, 26 Jun 2024 03:33:22 +0000 (20:33 -0700)] 
Add WARN_UNUSED_RESULT parse error

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.h (enum InlineAsmParseError):
Add WARN_UNUSED_RESULT parse error
(enum WARN_UNUSED_RESULT): Likewise.

Signed-off-by: badumbatish <tanghocle456@gmail.com>
13 months agoAdded a test that is expected to fail
jjasmine [Mon, 17 Jun 2024 04:23:21 +0000 (21:23 -0700)] 
Added a test that is expected to fail

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_clobber_abi):
added comments
(parse_options): Likewise
(parse_asm_arg): Likewise
(parse_asm): Likewise
* expand/rust-macro-builtins-asm.h: Likewise

gcc/testsuite/ChangeLog:

* rust/compile/inline_asm_illegal_options.rs: new test
* rust/compile/inline_asm_illegal_operands.rs: New test.
This is expected to fail but we couldn't resolve parse_expr()'s
general functionality yet

Signed-off-by: badumbatish <tanghocle456@gmail.com>
13 months agoAdded tl::expected to parse_operand
jjasmine [Mon, 17 Jun 2024 03:40:06 +0000 (20:40 -0700)] 
Added tl::expected to parse_operand

Added tl::expected to parse_operand by implementing the validation
inside the parse_reg_operand function.

gcc/rust/ChangeLog:

* ast/rust-expr.h:
Added tl::expected to parse_operand
* expand/rust-macro-builtins-asm.cc (parse_reg): Likewise.
(parse_reg_operand): Likewise.
(parse_reg_operand_const): Likewise.
(parse_reg_operand_inout): Likewise.
(parse_asm_arg): Likewise.
* expand/rust-macro-builtins-asm.h: Likewise.

Signed-off-by: badumbatish <tanghocle456@gmail.com>
13 months agoScaffold expected on parse_options and asm_arg
jjasmine [Sun, 16 Jun 2024 18:03:23 +0000 (11:03 -0700)] 
Scaffold expected on parse_options and asm_arg

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (check_and_set):
Scaffold expected on parse_options and asm_arg
(parse_options): Likewise
(parse_asm_arg): Likewise
* expand/rust-macro-builtins-asm.h (check_and_set): Likewise
(parse_label): Likewise

Signed-off-by: badumbatish <tanghocle456@gmail.com>
13 months agoFinish expected parse_reg_operand
jjasmine [Sun, 16 Jun 2024 05:18:22 +0000 (22:18 -0700)] 
Finish expected parse_reg_operand

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_reg_operand_in):
Finish expected parse_reg_operand
(parse_reg_operand_unexpected): Likewise
* expand/rust-macro-builtins-asm.h (parse_reg_operand_unexpected): Likewise

Signed-off-by: badumbatish <tanghocle456@gmail.com>
13 months agoFinish incorporating expected of parse_reg_operand
jjasmine [Fri, 14 Jun 2024 06:06:01 +0000 (23:06 -0700)] 
Finish incorporating expected of parse_reg_operand

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_clobber_abi):
Finish incorporating expected of parse_reg_operand
(parse_reg): Likewise.
(parse_reg_operand): Likewise.
(parse_reg_operand_in): Likewise.
(parse_reg_operand_out): Likewise.
(parse_reg_operand_lateout): Likewise.
(parse_reg_operand_const): Likewise.
(parse_reg_operand_inout): Likewise.
(parse_reg_operand_sym): Likewise.
(MacroBuiltin::asm_handler): Likewise.
(parse_asm_arg): Likewise.
(parse_asm): Likewise.
(parse_format_strings): Likewise.
(validate): Likewise.
* expand/rust-macro-builtins-asm.h (class InlineAsmParseError): Likewise.
(enum InlineAsmParseError): Likewise.
(validate): Likewise.
(parse_format_strings): Likewise.
(parse_reg_operand_in): Likewise.
(parse_reg_operand_out): Likewise.
(parse_reg_operand_lateout): Likewise.
(parse_reg_operand_inout): Likewise.
(parse_reg_operand_inlateout): Likewise.
(parse_reg_operand_const): Likewise.
(parse_reg_operand_sym): Likewise.

13 months agoAdd RAW_STRING_LITERAL
ansh [Mon, 24 Jun 2024 11:01:53 +0000 (04:01 -0700)] 
Add RAW_STRING_LITERAL

gcc/rust/ChangeLog:

* ast/rust-ast-collector.cc (TokenCollector::visit):
Handle case for RAW_STRING_LITERAL.
* ast/rust-ast.cc (AttributeParser::parse_meta_item_inner):
Likewise.
(AttributeParser::parse_literal): Likewise.
* ast/rust-ast.h: Likewise.
* hir/rust-ast-lower-base.cc (ASTLoweringBase::lower_literal):
Likewise.
* lex/rust-lex.cc (Lexer::parse_raw_string): Likewise.
* lex/rust-token.cc (Token::as_string): Likewise.
* lex/rust-token.h (enum PrimitiveCoreType): Likewise.
* parse/rust-parse-impl.h (Parser::parse_attr_input): Likewise.
(Parser::parse_literal_expr): Likewise.
(Parser::parse_pattern_no_alt): Likewise.

Signed-off-by: ansh <anshmalik2002@gmail.com>
13 months agoAdded ExprType::InlineAsm
jjasmine [Sun, 23 Jun 2024 18:00:58 +0000 (11:00 -0700)] 
Added ExprType::InlineAsm

gcc/rust/ChangeLog:

* hir/tree/rust-hir-expr.h:
Added ExprType::InlineAsm
* hir/tree/rust-hir.h:
Added ExprType::InlineAsm

13 months agoAdd test case for using asm! outside of unsafe {}
jjasmine [Sat, 22 Jun 2024 06:38:10 +0000 (23:38 -0700)] 
Add test case for using asm! outside of unsafe {}

gcc/testsuite/ChangeLog:

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

13 months agoexpand: Switch semicolon boolean to an enum instead.
Arthur Cohen [Tue, 18 Jun 2024 11:47:57 +0000 (13:47 +0200)] 
expand: Switch semicolon boolean to an enum instead.

gcc/rust/ChangeLog:

* ast/rust-ast-fragment.h (enum class): Add InvocKind and AsmKind enums.
* ast/rust-macro.h: Switch semicolon boolean to InvocKind enum.
* expand/rust-expand-visitor.cc (ExpandVisitor::visit): Likewise.
* expand/rust-macro-builtins-asm.cc (MacroBuiltin::asm_handler): Likewise.
(parse_asm): Likewise.
* expand/rust-macro-builtins-asm.h (parse_asm): Likewise.
* expand/rust-macro-builtins-format-args.cc (MacroBuiltin::format_args_handler): Likewise.
* expand/rust-macro-builtins-include.cc (MacroBuiltin::include_bytes_handler): Likewise.
(MacroBuiltin::include_str_handler): Likewise.
(MacroBuiltin::include_handler): Likewise.
* expand/rust-macro-builtins-location.cc (MacroBuiltin::file_handler): Likewise.
(MacroBuiltin::column_handler): Likewise.
(MacroBuiltin::line_handler): Likewise.
* expand/rust-macro-builtins-log-debug.cc (MacroBuiltin::assert_handler): Likewise.
* expand/rust-macro-builtins-utility.cc (MacroBuiltin::compile_error_handler): Likewise.
(MacroBuiltin::concat_handler): Likewise.
(MacroBuiltin::env_handler): Likewise.
(MacroBuiltin::cfg_handler): Likewise.
(MacroBuiltin::stringify_handler): Likewise.
* expand/rust-macro-builtins.cc (format_args_maker): Likewise.
(enum class): Likewise.
(inline_asm_maker): Likewise.
(MacroBuiltin::sorry): Likewise.
(MacroBuiltin::proc_macro_builtin): Likewise.
* expand/rust-macro-builtins.h: Likewise.
* expand/rust-macro-expand.cc (MacroExpander::expand_decl_macro): Likewise.
(MacroExpander::expand_eager_invocations): Likewise.
(MacroExpander::expand_invoc): Likewise.
* expand/rust-macro-expand.h (struct MacroExpander): Likewise.

13 months agoexpand: Keep track of semicoloned builtin macros
Arthur Cohen [Fri, 14 Jun 2024 14:45:34 +0000 (16:45 +0200)] 
expand: Keep track of semicoloned builtin macros

This is quite a rough fix (like a lot of the macro expansion code...) but
it allows built-in macros to be treated as statements. I *think* asm!()
might be the only one where it really matters, but also doing something
like

{
    line!();
}

will now work, whereas before the macro invocation would not get expanded
properly and would be ignored.

gcc/rust/ChangeLog:

* ast/rust-ast-fragment.h: Pass `is_semicolon` information to builtin
macro transcribers.
* ast/rust-macro.h: Pass semicolon information to transcriber..
* expand/rust-macro-builtins-asm.cc (MacroBuiltin::asm_handler): Likewise.
(parse_asm): Likewise.
* expand/rust-macro-builtins-asm.h (parse_asm): Likewise.
* expand/rust-macro-builtins-format-args.cc (MacroBuiltin::format_args_handler): Likewise.
* expand/rust-macro-builtins-include.cc (MacroBuiltin::include_bytes_handler): Likewise.
(MacroBuiltin::include_str_handler): Likewise.
(MacroBuiltin::include_handler): Likewise.
* expand/rust-macro-builtins-location.cc (MacroBuiltin::file_handler): Likewise.
(MacroBuiltin::column_handler): Likewise.
(MacroBuiltin::line_handler): Likewise.
* expand/rust-macro-builtins-log-debug.cc (MacroBuiltin::assert_handler): Likewise.
* expand/rust-macro-builtins-utility.cc (MacroBuiltin::compile_error_handler): Likewise.
(MacroBuiltin::concat_handler): Likewise.
(MacroBuiltin::env_handler): Likewise.
(MacroBuiltin::cfg_handler): Likewise.
(MacroBuiltin::stringify_handler): Likewise.
* expand/rust-macro-builtins.cc (format_args_maker): Likewise.
(inline_asm_maker): Likewise.
(MacroBuiltin::sorry): Likewise.
(MacroBuiltin::proc_macro_builtin): Likewise.
* expand/rust-macro-builtins.h: Likewise.
* expand/rust-macro-expand.cc (MacroExpander::expand_decl_macro): Likewise.
(MacroExpander::expand_invoc): Likewise.
* ast/rust-ast-visitor.cc (DefaultASTVisitor::visit): Remove rust_unreachable.
* ast/rust-ast.cc (InlineAsm::accept_vis): Likewise.
* hir/tree/rust-hir.cc (InlineAsm::accept_vis): Likewise.

13 months agoFix optional trait parsing
dave [Wed, 15 Nov 2023 18:28:27 +0000 (12:28 -0600)] 
Fix optional trait parsing

gcc/rust/ChangeLog:

* typecheck/rust-hir-type-check-item.cc (TypeCheckItem::visit): Check for ?Trait in visitor

gcc/testsuite/ChangeLog:

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

Signed-off-by: Dave Evans <dave@dmetwo.org>
13 months agoPartial second layer of expected in parsing asm
jjasmine [Wed, 12 Jun 2024 06:25:50 +0000 (23:25 -0700)] 
Partial second layer of expected in parsing asm

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parseDirSpec):
Partial second layer of expected in parsing asm
(parse_clobber_abi): Likewise
(parse_operand): Likewise
(parse_reg_operand): Likewise
(parse_asm_arg): Likewise
* expand/rust-macro-builtins-asm.h (parse_clobber_abi): Likewise
(parse_reg_operand): Likewise
(parse_operand): Likewise

13 months agoExpected first layer done
jjasmine [Wed, 12 Jun 2024 05:07:14 +0000 (22:07 -0700)] 
Expected first layer done

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_reg):
Expected first layer done
(parse_reg_operand): Likewise.
(parse_asm_arg): Likewise.
(parse_format_strings): Likewise.
(parse_asm): Likewise.
(validate): Likewise.
* expand/rust-macro-builtins-asm.h (parse_asm_arg): Likewise.
(validate): Likewise.
(parse_format_strings): Likewise.

13 months agoMove parser and last_token_id to InlineAsmCtx
jjasmine [Wed, 12 Jun 2024 00:56:20 +0000 (17:56 -0700)] 
Move parser and last_token_id to InlineAsmCtx

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_clobber_abi):
Move parser and last_token_id to InlineAsmCtx to prepapre
for tl::expected.
(parse_reg): Likewise.
(parse_operand): Likewise.
(parse_reg_operand): Likewise.
(check_and_set): Likewise.
(parse_options): Likewise.
(parse_format_string): Likewise.
(parse_asm_arg): Likewise.
(parse_asm): Likewise.
* expand/rust-macro-builtins-asm.h (class InlineAsmParseError): Likewise.
(parse_asm_arg): Likewise.
(check_and_set): Likewise.
(parse_operand): Likewise.
(parse_reg_operand): Likewise.
(parse_options): Likewise.
(parse_reg): Likewise.
(parse_clobber_abi): Likewise.
(parse_format_string): Likewise.

13 months agoUpdate parser to parse strings in the first stage
jjasmine [Tue, 11 Jun 2024 23:57:48 +0000 (16:57 -0700)] 
Update parser to parse strings in the first stage

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_reg_operand):
Update parser to parse strings in the first stage
(parse_label): not needed right now

13 months agoScaffolding validation of asm!
jjasmine [Tue, 11 Jun 2024 01:08:42 +0000 (18:08 -0700)] 
Scaffolding validation of asm!

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_asm):
Scaffolding validation of asm!
(validate): Likewise
* expand/rust-macro-builtins-asm.h (validate): Likewise

13 months agoPartial support for operand
jjasmine [Mon, 10 Jun 2024 23:54:34 +0000 (16:54 -0700)] 
Partial support for operand

gcc/rust/ChangeLog:

* ast/rust-expr.h (struct InlineAsmOperand):
Partial support for operand
* expand/rust-macro-builtins-asm.cc (parse_reg_operand): Likewise.
(parse_label): Likewise.
* expand/rust-macro-builtins-asm.h (parse_label): Likewise.

13 months agoRefactoring and supporting more parse_reg_operand
jjasmine [Mon, 10 Jun 2024 21:04:11 +0000 (14:04 -0700)] 
Refactoring and supporting more parse_reg_operand

gcc/rust/ChangeLog:

* ast/rust-expr.h (struct InlineAsmOperand):
Refactoring and supporting more parse_reg_operand
* expand/rust-macro-builtins-asm.cc (parse_reg_operand):
Likewise.
(rust_debug): Likewise.

13 months agoFix visitor-related warnings
jjasmine [Thu, 6 Jun 2024 01:12:49 +0000 (18:12 -0700)] 
Fix visitor-related warnings

gcc/rust/ChangeLog:

* ast/rust-ast-collector.cc (TokenCollector::visit):
Fix visitor-related warnings
* ast/rust-ast-collector.h: Likewise.
* ast/rust-ast-visitor.cc (DefaultASTVisitor::visit): Likewise.
* ast/rust-ast-visitor.h: Likewise.
* checks/errors/borrowck/rust-bir-builder-struct.h: Likewise.
* checks/errors/borrowck/rust-function-collector.h: Likewise.
* checks/errors/rust-const-checker.cc (ConstChecker::visit): Likewise.
* checks/errors/rust-const-checker.h: Likewise.
* expand/rust-derive.h: Likewise.
* expand/rust-macro-builtins-asm.cc (parse_reg_operand): Likewise.
* hir/rust-hir-dump.cc (Dump::visit): Likewise.
* hir/rust-hir-dump.h: Likewise.
* hir/tree/rust-hir-visitor.h: Likewise.
* resolve/rust-ast-resolve-base.cc (ResolverBase::visit): Likewise.
* resolve/rust-ast-resolve-base.h: Likewise.

13 months agoAdd potentially_nonpromoted_keywords set str
jjasmine [Wed, 5 Jun 2024 15:24:50 +0000 (08:24 -0700)] 
Add potentially_nonpromoted_keywords set str

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_reg_operand):
Add potentially_nonpromoted_keywords set str
(check_identifier): likewise
* expand/rust-macro-builtins-asm.h (parse_format_string):
likewise

gcc/testsuite/ChangeLog:

* rust/compile/inline_asm_parse_operand.rs: fix warnings

13 months agoSuccessful parse of in and inout, albeit with str
jjasmine [Wed, 5 Jun 2024 06:14:19 +0000 (23:14 -0700)] 
Successful parse of in and inout, albeit with str

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_reg_operand):
Successful parse of in and inout, albeit with str
(check_identifier): Likewise.
(parse_asm_arg): Likewise.
* expand/rust-macro-builtins-asm.h (parse_format_string): Likewise.

gcc/testsuite/ChangeLog:

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

13 months agoScaffolding HIRFullVisitor for inline asm
jjasmine [Wed, 5 Jun 2024 03:17:23 +0000 (20:17 -0700)] 
Scaffolding HIRFullVisitor for inline asm

gcc/rust/ChangeLog:

* ast/rust-ast-visitor.h:
Scaffolding HIRFullVisitor for inline asm
* ast/rust-ast.cc (InlineAsm::accept_vis): Likewise.
* hir/tree/rust-hir-visitor.h (RUST_HIR_VISITOR_H): Likewise.
* hir/tree/rust-hir.cc (InlineAsm::accept_vis): Likewise.

13 months agoScaffolding ast visitor for InlineAsm
jjasmine [Wed, 5 Jun 2024 02:34:58 +0000 (19:34 -0700)] 
Scaffolding ast visitor for InlineAsm

gcc/rust/ChangeLog:

* ast/rust-ast-visitor.h:
Scaffolding ast visitor for InlineAsm
* ast/rust-ast.cc (InlineAsm::accept_vis): Likewise.
* ast/rust-expr.h: Likewise.

13 months agoFix warnings
jjasmine [Sat, 1 Jun 2024 02:34:49 +0000 (19:34 -0700)] 
Fix warnings

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_reg_operand):
Fix compile warnings.
(parse_options): Likewise.
(parse_asm): Likewise.

gcc/testsuite/ChangeLog:

* rust/compile/inline_asm_illegal_options.rs:

13 months agoPartial unsafe support for inline asm
jjasmine [Fri, 31 May 2024 23:09:40 +0000 (16:09 -0700)] 
Partial unsafe support for inline asm

gcc/rust/ChangeLog:

* checks/errors/rust-unsafe-checker.cc (UnsafeChecker::visit):
Partial unsafe support for inline asm
* checks/errors/rust-unsafe-checker.h: Likewise.
* hir/tree/rust-hir-expr.h: Likewise.
* hir/tree/rust-hir.cc (InlineAsm::accept_vis): Likewise.

13 months agoAdd support for AST to HIR inline asm translation
jjasmine [Fri, 31 May 2024 21:55:45 +0000 (14:55 -0700)] 
Add support for AST to HIR inline asm translation

gcc/rust/ChangeLog:

* ast/rust-expr.h:
Add support for AST to HIR inline asm translation
* hir/rust-ast-lower-base.cc (ASTLoweringBase::visit): Likewise.
* hir/rust-ast-lower-base.h: Likewise.
* hir/rust-ast-lower-expr.cc (ASTLoweringExpr::visit): Likewise.
* hir/rust-ast-lower-expr.h: Likewise.
* hir/tree/rust-hir-expr.h (class InlineAsm): Likewise.

13 months agoSlim down the test cases
jjasmine [Fri, 31 May 2024 09:06:18 +0000 (02:06 -0700)] 
Slim down the test cases

gcc/testsuite/ChangeLog:

* rust/compile/inline_asm_faulty_clobber.rs: compress
the test
* rust/compile/inline_asm_nop.rs: compress
the test
* rust/compile/inline_asm_faulty_clobber_1.rs: Removed.
* rust/compile/inline_asm_faulty_clobber_2.rs: Removed.
* rust/compile/inline_asm_nop_2.rs: Removed.

13 months agoRefactoring for inline asm pr
jjasmine [Fri, 31 May 2024 09:01:18 +0000 (02:01 -0700)] 
Refactoring for inline asm pr

gcc/rust/ChangeLog:

* ast/rust-expr.h (struct AnonConst):
major refactoring of inline asm, mostly concerns
naming convention, trinary conditionals, warnings,
adding rust_unreachables in not-yet supported errors.
(struct InlineAsmRegOrRegClass): Likewise.
(struct InlineAsmOperand): Likewise.
* expand/rust-macro-builtins-asm.cc (parse_clobber_abi): Likewise.
(parse_reg): Likewise.
(parse_operand): Likewise.
(parse_reg_operand): Likewise.
(check_and_set): Likewise.
(parse_options): Likewise.
(parse_format_string): Likewise.
(parse_asm_arg): Likewise.
(parse_asm): Likewise.
* expand/rust-macro-builtins-asm.h (parse_asm_arg): Likewise.
(check_identifier): Likewise.
(check_and_set): Likewise.
(parse_operand): Likewise.
(parse_reg_operand): Likewise.
(parse_options): Likewise.
(parse_reg): Likewise.
(parse_clobber_abi): Likewise.
* expand/rust-macro-builtins.cc (enum class): Likewise.
(inline_asm_maker): Likewise.
* checks/errors/borrowck/ffi-polonius/Cargo.lock: Removed. Likewise.

gcc/testsuite/ChangeLog:
* rust/compile/inline_asm_faulty_clobber.rs: Likewise.
* rust/compile/inline_asm_faulty_clobber_1.rs: Likewise.
* rust/compile/inline_asm_faulty_clobber_2.rs: Likewise.
* rust/compile/inline_asm_illegal_options.rs: Likewise.

13 months agoGot AST::Fragment to be created from InlineAsm
jjasmine [Wed, 29 May 2024 04:56:19 +0000 (21:56 -0700)] 
Got AST::Fragment to be created from InlineAsm

gcc/rust/ChangeLog:

* ast/rust-expr.h (struct AnonConst):
Got AST::Fragment to be created from InlineAsm.
(struct InlineAsmOperand): Likewise.
(class InlineAsm): Likewise.
* expand/rust-macro-builtins-asm.cc (parse_reg_operand): Likewise.
(parse_asm): likewise

13 months agoWorking towards parse_reg and parse_reg_operand
jjasmine [Tue, 28 May 2024 08:21:07 +0000 (01:21 -0700)] 
Working towards parse_reg and parse_reg_operand

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_reg):
Working towards parse_reg and parse_reg_operand
(parse_reg_operand):
Working towards parse_reg and parse_reg_operand
(parse_asm_arg):
Add todo about errors
* expand/rust-macro-builtins-asm.h (parse_global_asm):
remove dead code.
(parse_nonglobal_asm):
remove dead code.

13 months agoRenamed parseAsmArg to conform to other function names
jjasmine [Tue, 28 May 2024 07:17:33 +0000 (00:17 -0700)] 
Renamed parseAsmArg to conform to other function names

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parseAsmArg):
Renamed parseAsmArg to conform to other function names
(parse_asm_arg): Likewise.
(parse_asm): Likewise.
* expand/rust-macro-builtins-asm.h (parseAsmArg): Likewise.
(parse_asm_arg): Likewise.

13 months agoBig Refactor after meeting
jjasmine [Tue, 28 May 2024 03:51:38 +0000 (20:51 -0700)] 
Big Refactor after meeting

gcc/rust/ChangeLog:

* ast/rust-expr.h (struct InlineAsmRegOrRegClass):
Remove union
(struct InlineAsmOperand): Make instances of inside struct.
* expand/rust-macro-builtins-asm.cc (parse_clobber_abi):
Change signature with inlineAsmCtx.
(parse_reg): Likewise.
(parse_operand): Likewise.
(parse_reg_operand): Likewise.
(check_and_set): Likewise.
(parse_options): Likewise.
(parse_format_string): Likewise.
(parseAsmArg): Likewise.
(parse_asm): Likewise.
* expand/rust-macro-builtins-asm.h (class InlineAsmContext): Likewise.
(parseAsmArg): Likewise.
(check_and_set): Likewise.
(parse_reg_operand): Likewise.
(parse_options): Likewise.
(parse_reg): Likewise.
(parse_clobber_abi): Likewise.

13 months agoRemove global_asm and non_global_asm handler
jjasmine [Fri, 24 May 2024 23:01:13 +0000 (16:01 -0700)] 
Remove global_asm and non_global_asm handler

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc
(MacroBuiltin::global_asm_handler):
Remove global_asm and non_global_asm handler
(MacroBuiltin::nonglobal_asm_handler): Likewise.
(MacroBuiltin::asm_handler): Likewise.
* expand/rust-macro-builtins.cc (enum class): Likewise.
(inline_asm_maker): Likewise.
* expand/rust-macro-builtins.h: Likewise.

13 months agoSafegaurd InlineAsm's clone_expr_...
jjasmine [Fri, 24 May 2024 22:35:16 +0000 (15:35 -0700)] 
Safegaurd InlineAsm's clone_expr_...

Safegaurd InlineAsm's clone_expr_... with unreachable since
we would never use them.

gcc/rust/ChangeLog:

* ast/rust-expr.h:
Safegaurd InlineAsm's clone_expr_... with unreachable.

13 months agoRename InlineAsmOptions to InlineAsmOption
jjasmine [Fri, 24 May 2024 22:31:48 +0000 (15:31 -0700)] 
Rename InlineAsmOptions to InlineAsmOption

Rename InlineAsmOptions to InlineAsmOption for clarity

gcc/rust/ChangeLog:

* ast/rust-ast-full-decls.h (enum class):
Rename InlineAsmOptions to InlineAsmOption for clarity
* ast/rust-expr.h (enum class): Likewise.
* expand/rust-macro-builtins-asm.cc (check_and_set): Likewise.
(parse_options): Likewise.
* expand/rust-macro-builtins-asm.h (check_and_set): Likewise.
* hir/tree/rust-hir-expr.h: Likewise.

13 months agoScaffolding parse_reg
jjasmine [Fri, 24 May 2024 22:18:45 +0000 (15:18 -0700)] 
Scaffolding parse_reg

gcc/rust/ChangeLog:

* ast/rust-expr.h (struct InlineAsmRegOrRegClass):
Scaffolding parse_reg
* expand/rust-macro-builtins-asm.cc (parse_reg): Likewise.
(parse_operand): Likewise.
(parseAsmArg): Likewise.

13 months agoResolve static decl warning
jjasmine [Wed, 22 May 2024 18:25:07 +0000 (11:25 -0700)] 
Resolve static decl warning

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.h (parseAsmArg):
Resolve static decl warning
(parse_nonglobal_asm):
Resolve static decl warning

13 months agoAdd checks for duplicate options in inline asm
jjasmine [Wed, 22 May 2024 09:00:09 +0000 (02:00 -0700)] 
Add checks for duplicate options in inline asm

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (check_and_set):
Add checks for duplicate options in inline asm
(parse_options): likewise.

gcc/testsuite/ChangeLog:

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

13 months agoWraps inline_asm tests in unsafe {}
jjasmine [Wed, 22 May 2024 08:23:40 +0000 (01:23 -0700)] 
Wraps inline_asm tests in unsafe {}

gcc/testsuite/ChangeLog:

* rust/compile/inline_asm_faulty_clobber.rs:
Wraps inline_asm tests in unsafe {}
* rust/compile/inline_asm_faulty_clobber_1.rs: likewise.
* rust/compile/inline_asm_faulty_clobber_2.rs: likewise.
* rust/compile/inline_asm_ident_first.rs: likewise.
* rust/compile/inline_asm_nop.rs: likewise.
* rust/compile/inline_asm_nop_2.rs: likewise.

13 months agoParsing of options(...) done.
jjasmine [Wed, 22 May 2024 08:18:48 +0000 (01:18 -0700)] 
Parsing of options(...) done.

This is without any mutually exclusive options checked, or
any relationship with reg_operands. Very primitive.

gcc/rust/ChangeLog:

* ast/rust-expr.h: parsing of options(...)
* expand/rust-macro-builtins-asm.cc (check_and_set):
likewise.
(parse_options): likewise.
(parseAsmArg): likewise.
* expand/rust-macro-builtins-asm.h (check_and_set):
likewise.

gcc/testsuite/ChangeLog:

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

13 months agoImplemented parse_clobber_abi to pass new tests
jjasmine [Wed, 22 May 2024 02:46:18 +0000 (19:46 -0700)] 
Implemented parse_clobber_abi to pass new tests

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_clobber_abi):
implemented parse_clobber_abi
(parse_format_string): likewise.
(parseAsmArg): likewise.
(parse_asm): likewise.
* expand/rust-macro-builtins-asm.h (parseAsmArg): likewise.

13 months agoAdded faulty tests for inline asm cloberring
jjasmine [Wed, 22 May 2024 02:45:35 +0000 (19:45 -0700)] 
Added faulty tests for inline asm cloberring

gcc/testsuite/ChangeLog:

* rust/compile/inline_asm_faulty_clobber.rs: New test.
* rust/compile/inline_asm_faulty_clobber_1.rs: New test.
* rust/compile/inline_asm_faulty_clobber_2.rs: New test.

13 months agoAdd tests parsing with trailing commas inline asm
jjasmine [Wed, 22 May 2024 01:06:30 +0000 (18:06 -0700)] 
Add tests parsing with trailing commas inline asm

gcc/testsuite/ChangeLog:

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

13 months agoTop level parsing test for asm!
jjasmine [Wed, 22 May 2024 00:54:57 +0000 (17:54 -0700)] 
Top level parsing test for asm!

gcc/testsuite/ChangeLog:

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

13 months agoAdd a simple no-op test for asm!
jjasmine [Wed, 22 May 2024 00:48:30 +0000 (17:48 -0700)] 
Add a simple no-op test for asm!

gcc/testsuite/ChangeLog:

* rust/compile/inline_asm_nop.rs: Simple test for asm!

13 months agoReplace scaffolded InlineAsm with real InlineAsm.
jjasmine [Tue, 21 May 2024 23:50:36 +0000 (16:50 -0700)] 
Replace scaffolded InlineAsm with real InlineAsm.

Replace scaffolded InlineAsm with real InlineAsm node in rust-expr.h

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parseDirSpec): replace
scaffolded InlineAsm with real InlineAsm.
(parse_clobber_abi): likewise.
(check_and_set): likewise.
(parse_options): likewise.
(parseAsmArg): likewise.
(parse_asm): likewise.
* expand/rust-macro-builtins-asm.h (struct AsmParseError): likewise.
(enum InlineAsmDirSpec): likewise.
(enum InlineAsmRegOrRegClass): likewise.
(struct AsmArg): likewise.
(parseAsmArg): likewise.
(check_and_set): likewise.
(parse_operand): likewise.
(parse_options): likewise.
(parse_reg): likewise.
(parse_clobber_abi): likewise.

13 months agoMake InlineAsm non-abstract for usage in parsing.
jjasmine [Tue, 21 May 2024 22:02:00 +0000 (15:02 -0700)] 
Make InlineAsm non-abstract for usage in parsing.

gcc/rust/ChangeLog:

* ast/rust-expr.h: Make InlineAsm non-abstract for usage in parsing.

13 months agoIntroduced is_global_asm to InlineAsm AST
jjasmine [Tue, 21 May 2024 21:53:52 +0000 (14:53 -0700)] 
Introduced is_global_asm to InlineAsm AST

gcc/rust/ChangeLog:

* ast/rust-expr.h: Introduced is_global_asm to InlineAsm AST

13 months agoFirst draft of parse_option finished
jjasmine [Tue, 21 May 2024 07:31:57 +0000 (00:31 -0700)] 
First draft of parse_option finished

Finish up on parse_option, formatted parse_clobber_abi
gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_clobber_abi): format
(check_and_set): helper function, is try_set_option equivalent
(parse_options): new function
* expand/rust-macro-builtins-asm.h (enum InlineAsmOptions):
removed
(check_and_set): decl of helper function

13 months agoFix clobber_api brackets
jjasmine [Tue, 21 May 2024 06:04:01 +0000 (23:04 -0700)] 
Fix clobber_api brackets

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_clobber_abi): title.

13 months agoWorking on parse_options for a bit more
jjasmine [Tue, 21 May 2024 06:02:59 +0000 (23:02 -0700)] 
Working on parse_options for a bit more

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_options): title.

13 months agoIntroduce first implementation of parse_clobber_abi
jjasmine [Tue, 21 May 2024 00:01:43 +0000 (17:01 -0700)] 
Introduce first implementation of parse_clobber_abi

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_clobber_abi): title.
(parseAsmArg): title.
* expand/rust-macro-builtins-asm.h (parse_clobber_abi): title.

13 months agoWorking on parseAsmArg
jjasmine [Sun, 19 May 2024 04:24:10 +0000 (21:24 -0700)] 
Working on parseAsmArg

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (enum InlineAsmRegOrRegClass): title.
(parseAsmArg): title.
(check_identifier): title.
(parse_operand): title.
(parse_options): title.
(parse_reg): title.
(parseDirSpec): title.
(parse_asm): title.

13 months agoAlmost done with top level parsing
jjasmine [Wed, 8 May 2024 18:06:00 +0000 (11:06 -0700)] 
Almost done with top level parsing

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (struct AsmParseError): title.
(enum InlineAsmDirSpec): title.
(enum InlineAsmOptions): title.
(struct AsmArg): title.
(parseAsmArg): title.
(parse_global_asm): title.
(parse_nonglobal_asm): title.
(parse_asm): title.
(parseDirSpec): title.
(parse_format_string): title.
(MacroBuiltin::global_asm_handler): title.
(MacroBuiltin::nonglobal_asm_handler): title.
* expand/rust-macro-builtins.cc: title.
* expand/rust-macro-builtins.h: title.

13 months agoAdd regression tests for exclusive range pattern
Pierre-Emmanuel Patry [Tue, 21 May 2024 16:29:08 +0000 (18:29 +0200)] 
Add regression tests for exclusive range pattern

Add a few test to check the exclusive range pattern feature. This feature
is experimental and shall not be enabled in stable rust.

gcc/testsuite/ChangeLog:

* rust/compile/exclusive_range_pattern.rs: New test.
* rust/compile/exclusive_range_pattern_feature_gate.rs: New test.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
13 months agoAdd exclusive_range_pattern feature gate
Pierre-Emmanuel Patry [Tue, 21 May 2024 16:09:14 +0000 (18:09 +0200)] 
Add exclusive_range_pattern feature gate

This syntax is experimental and shall be explicitely enabled in the crate
attributes as it cannot be used in stable rust.

gcc/rust/ChangeLog:

* checks/errors/rust-feature-gate.cc (FeatureGate::visit): Gate the
excluded pattern.
* checks/errors/rust-feature-gate.h: Update the function prototype
and delete two empty implementations in order to use default visitor
behavior.
* checks/errors/rust-feature.cc (Feature::create): Add the new
exclusive range pattern feature gate.
* checks/errors/rust-feature.h: Add new feature enum variant for
exclusive range patterns.
* parse/rust-parse-impl.h (Parser::parse_pattern_no_alt): Forward the
token location to the AST.
(Parser::parse_ident_leading_pattern): Likewise.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
13 months agoParse exclusive range pattern
Pierre-Emmanuel Patry [Tue, 21 May 2024 15:45:34 +0000 (17:45 +0200)] 
Parse exclusive range pattern

Exclusive range pattern were not handled by the parser as this an
experimental feature.

gcc/rust/ChangeLog:

* ast/rust-pattern.cc (tokenid_to_rangekind): Add a new function to
get a range kind from the current token type.
(RangePattern::as_string): Change the string representation for range
pattern in order to handle excluded ranges.
* ast/rust-pattern.h (enum class): Add new enum class to differentiate
range kinds.
(tokenid_to_rangekind): New prototype for a function that converts a
token id to it's corresponding range kind.
(class RangePattern): Change the class to accept a range kind instead
of an ellipsis boolean.
* hir/rust-ast-lower-pattern.cc (ASTLoweringPattern::visit): Abort
when an excluded pattern has been found as we do not handle their
lowering yet.
* parse/rust-parse-impl.h (Parser::parse_literal_or_range_pattern):
Parse excluded range patterns.
(Parser::parse_pattern_no_alt): Likewise.
(Parser::parse_ident_leading_pattern): Likewise.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
13 months agoAdd some test for raw_ref_op to prevent regressions
Pierre-Emmanuel Patry [Tue, 21 May 2024 09:36:55 +0000 (11:36 +0200)] 
Add some test for raw_ref_op to prevent regressions

Add a test for the feature gate, as well as some test to ensure the raw
keyword stays weak. Also add some tests to check whether the raw_ref_op
syntax is parsed correctly.

gcc/testsuite/ChangeLog:

* rust/compile/not_raw_ref_op.rs: New test.
* rust/compile/raw_ref_op.rs: New test.
* rust/compile/raw_ref_op_feature_gate.rs: New test.
* rust/compile/raw_ref_op_invalid.rs: New test.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
13 months agoAdd raw_ref_op feature gate
Pierre-Emmanuel Patry [Tue, 21 May 2024 08:58:55 +0000 (10:58 +0200)] 
Add raw_ref_op feature gate

Raw ref operators are still experimental and shall not slip within
stable rust, they should therefore be feature gated.

gcc/rust/ChangeLog:

* checks/errors/rust-feature-gate.cc (FeatureGate::visit): Gate raw
borrow.
* checks/errors/rust-feature-gate.h: Update function prototype.
* checks/errors/rust-feature.cc: Add raw_ref_op gate.
* checks/errors/rust-feature.h: Likewise.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
13 months agoPrevent raw reference from being lowered silently
Pierre-Emmanuel Patry [Tue, 21 May 2024 08:38:16 +0000 (10:38 +0200)] 
Prevent raw reference from being lowered silently

We do not handle those kind of references yet, we shall not let them
pass as a regular reference.

gcc/rust/ChangeLog:

* ast/rust-expr.h: Add a getter for mutability.
* hir/rust-ast-lower-expr.cc (ASTLoweringExpr::visit): Panic when a
raw reference is met.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
13 months agoParse raw ref operator
Pierre-Emmanuel Patry [Tue, 21 May 2024 08:23:55 +0000 (10:23 +0200)] 
Parse raw ref operator

The raw ref operator is an unstable feature required to obtain a pointer
to unaligned adresses (mainly unaligned struct fields) without UB.

gcc/rust/ChangeLog:

* ast/rust-ast-builder.cc (Builder::ref): Adapt constructor to the new
API.
* ast/rust-ast-collector.cc (TokenCollector::visit): Emit a raw weak
keyword when required.
* ast/rust-ast.cc (BorrowExpr::as_string): Change as_string
representation to handle raw ref operator.
* ast/rust-expr.h (class BorrowExpr): Add raw discriminant.
* expand/rust-macro-builtins-include.cc: Adapt constructor to the new
API.
* parse/rust-parse-impl.h: Handle the raw weak keyword.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
13 months agoAdd a new regression test over struct expr field
Pierre-Emmanuel Patry [Mon, 20 May 2024 15:57:52 +0000 (17:57 +0200)] 
Add a new regression test over struct expr field

We want to prevent regressions on struct expr field attribute parsing.

gcc/testsuite/ChangeLog:

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

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
13 months agoAdd outer attributes to struct expr fields
Pierre-Emmanuel Patry [Mon, 20 May 2024 13:28:19 +0000 (15:28 +0200)] 
Add outer attributes to struct expr fields

Struct fields can have outer attributes on their field for various
purpose, this behavior should be reflected upon struct expr fields.

gcc/rust/ChangeLog:

* ast/rust-ast-collector.cc (TokenCollector::visit): Output field
attributes.
* ast/rust-expr.h (class StructExprField): Add outer attributes member.
* parse/rust-parse-impl.h (Parser::parse_struct_expr_field): Parse
outer attributes and store them in the appropriate AST node.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
13 months agorust: Do not link with libdl and libpthread unconditionally
Arthur Cohen [Fri, 12 Apr 2024 11:52:18 +0000 (13:52 +0200)] 
rust: Do not link with libdl and libpthread unconditionally

ChangeLog:

* Makefile.tpl: Add CRAB1_LIBS variable.
* Makefile.in: Regenerate.
* configure: Regenerate.
* configure.ac: Check if -ldl and -lpthread are needed, and if so, add
them to CRAB1_LIBS.

gcc/rust/ChangeLog:

* Make-lang.in: Remove overazealous LIBS = -ldl -lpthread line, link
crab1 against CRAB1_LIBS.

13 months agoAdd two new tests related to may_dangle attribute
Pierre-Emmanuel Patry [Mon, 20 May 2024 11:29:51 +0000 (13:29 +0200)] 
Add two new tests related to may_dangle attribute

First test checks the may_dangle outer atttribute on generic params can
be parsed. The second one tests whether may_dangle attributes are
correctly feature gated.

gcc/testsuite/ChangeLog:

* rust/compile/dropck_eyepatch_feature_gate.rs: New test.
* rust/compile/may_dangle.rs: New test.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
13 months agoAdd dropck_eyepatch feature gate for may_dangle
Pierre-Emmanuel Patry [Mon, 20 May 2024 11:26:43 +0000 (13:26 +0200)] 
Add dropck_eyepatch feature gate for may_dangle

Add a new feature gate for may_dangle generic param outer attributes.

gcc/rust/ChangeLog:

* checks/errors/rust-feature-gate.cc: Visit and gate may_dangle
attributes.
* checks/errors/rust-feature-gate.h: Update visit function prototype
and add a new member function to check on a set of attributes whether
one is may_dangle.
* checks/errors/rust-feature.cc (Feature::create): Add new
dropck_eyepatch feature.
* checks/errors/rust-feature.h: Likewise.
* util/rust-attribute-values.h: Add new may_dangle attribute value.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
13 months agoAllow multiple outer attributes on generic params
Pierre-Emmanuel Patry [Mon, 20 May 2024 10:00:11 +0000 (12:00 +0200)] 
Allow multiple outer attributes on generic params

Previously generic params only allowed one outer attribute in front of
them.

gcc/rust/ChangeLog:

* ast/rust-ast-collector.cc (TokenCollector::visit): Visit outer
attributes.
* ast/rust-ast-visitor.cc (DefaultASTVisitor::visit): Change outer
attribute visit, we need to visit all of them.
* ast/rust-ast.cc (LifetimeParam::as_string): Change as_string
implementation to allow multiple outer attributes.
(TypeParam::as_string): Likewise.
* ast/rust-ast.h (class LifetimeParam): Allow multiple outer
attributes.
* ast/rust-item.h (class TypeParam): Likewise.
* ast/rust-path.h: Likewise.
* parse/rust-parse-impl.h (Parser::parse_generic_param): Change call
to outer attribute parsing to collect several attributes.
(Parser::parse_lifetime_param): Likewise.
(Parser::parse_type_param): Likewise.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
13 months agoFix generic parameter parsing
Pierre-Emmanuel Patry [Mon, 20 May 2024 09:02:53 +0000 (11:02 +0200)] 
Fix generic parameter parsing

Generic parameter parsing failed when an outer attribute was used on it.

gcc/rust/ChangeLog:

* parse/rust-parse-impl.h (Parser::parse_generic_param): Change token
reference to be the last token after all outer attributes have been
parsed.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
13 months agoAdd new test for box syntax
Pierre-Emmanuel Patry [Sun, 19 May 2024 00:11:36 +0000 (02:11 +0200)] 
Add new test for box syntax

Add a new test to prevent regressions on the box syntax as well as its
feature gate.

gcc/testsuite/ChangeLog:

* rust/compile/box_syntax.rs: New test.
* rust/compile/box_syntax_feature_gate.rs: New test.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
13 months agoAdd feature gate for box syntax
Pierre-Emmanuel Patry [Sun, 19 May 2024 00:44:42 +0000 (02:44 +0200)] 
Add feature gate for box syntax

The box syntax is experimental even though it is used in the standard
library. It should be feature gated to prevent anyone from using it in
stable rust.

gcc/rust/ChangeLog:

* checks/errors/rust-feature-gate.cc (FeatureGate::visit): Allow
visitor recursion in functions. Also add the gate for the box syntax.
* checks/errors/rust-feature-gate.h: Remove several recursion fences
in the feature gate visitor.
* checks/errors/rust-feature.cc (Feature::create): Add a new feature.
(Feature::as_name): Likewise.
* checks/errors/rust-feature.h: Add box_syntax gate.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
13 months agoParse box expressions
Pierre-Emmanuel Patry [Sat, 18 May 2024 21:53:42 +0000 (23:53 +0200)] 
Parse box expressions

Add support for old box expression syntax.

gcc/rust/ChangeLog:

* ast/rust-ast-collector.cc (TokenCollector::visit): Add visit member
function for BoxExpr nodes.
* ast/rust-ast-collector.h: Add visit function prototype.
* ast/rust-ast-visitor.cc (DefaultASTVisitor::visit): Add visit member
function to default ast visitor.
* ast/rust-ast-visitor.h: Add visit function's prototype.
* ast/rust-ast.cc (BoxExpr::as_string): Add as_string function
implementation for BoxExpr.
(BoxExpr::accept_vis): Add accept_vis implementation to BoxExpr.
* ast/rust-expr.h (class BoxExpr): Add BoxExpr class to represent boxed
expressions.
* expand/rust-derive.h: Add BoxExpr visit function prototype.
* hir/rust-ast-lower-base.cc (ASTLoweringBase::visit): Add BoxExpr
visitor implementation.
* hir/rust-ast-lower-base.h: Add visit function's prototype.
* hir/rust-ast-lower-expr.cc (ASTLoweringExpr::visit): Add BoxExpr
visitor implementation.
* hir/rust-ast-lower-expr.h: Add visit function's prototype.
* parse/rust-parse-impl.h (Parser::parse_box_expr): Add parse_box_expr
function's implementation.
* parse/rust-parse.h: Add parse_box_expr function's prototype.
* resolve/rust-ast-resolve-base.cc (ResolverBase::visit): Add resolver
visit implementation.
* resolve/rust-ast-resolve-base.h: Add resolver's visit function
prototype.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
14 months agoImprove handling of ConstantItem during name resolution 2.0
Owen Avery [Thu, 29 Feb 2024 01:19:04 +0000 (20:19 -0500)] 
Improve handling of ConstantItem during name resolution 2.0

gcc/rust/ChangeLog:

* resolve/rust-default-resolver.cc
(DefaultResolver::visit):
Scope with Rib::Kind::ConstantItem instead
of Rib::Kind::Item.
* resolve/rust-toplevel-name-resolver-2.0.cc
(TopLevel::visit): Remove redundancy in override of
ConstantItem visitor.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
14 months agoAllow rustc_const_stable and rustc_const_unstable
Owen Avery [Thu, 29 Feb 2024 02:00:08 +0000 (21:00 -0500)] 
Allow rustc_const_stable and rustc_const_unstable

gcc/rust/ChangeLog:

* expand/rust-macro-builtins.cc
(MacroBuiltin::builtin_transcribers):
Add entries for "rustc_const_stable" and "rustc_const_unstable".
* util/rust-attributes.cc
(__definitions): Add entries for RUSTC_CONST_STABLE and
RUSTC_CONST_UNSTABLE.
* util/rust-attribute-values.h
(Attributes::RUSTC_CONST_STABLE): New.
(Attributes::RUSTC_CONST_UNSTABLE): New.

gcc/testsuite/ChangeLog:

* rust/compile/rustc_const_stable.rs:
Enable feature rustc_attrs, expect no errors.
* rust/compile/rustc_const_unstable.rs: New test.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
14 months agoCorrected access specifiers
Kushal Pal [Mon, 27 May 2024 03:16:03 +0000 (03:16 +0000)] 
Corrected access specifiers

gcc/rust/ChangeLog:

* ast/rust-expr.h (class OperatorExpr):
Location should be private.
* hir/tree/rust-hir-expr.h (class OperatorExpr): Likewise.

Signed-off-by: Kushal Pal <kushalpal109@gmail.com>
14 months agoMake gccrs recognize negative_impls
jjasmine [Wed, 15 May 2024 19:44:15 +0000 (12:44 -0700)] 
Make gccrs recognize negative_impls

gcc/rust/ChangeLog:

* checks/errors/rust-feature-gate.cc (FeatureGate::visit): make
gccrs recognize negative_impls
* checks/errors/rust-feature-gate.h: likewise.
* checks/errors/rust-feature.cc (Feature::create): likewise.
* checks/errors/rust-feature.h: likewise.

gcc/testsuite/ChangeLog:

* rust/compile/negative_impls.rs: New test.
* rust/compile/negative_impls_2.rs: New test.

14 months agoAdd system include to `gcc/rust/rust-system.h`
SIGMazer [Tue, 23 Apr 2024 15:33:17 +0000 (17:33 +0200)] 
Add system include to `gcc/rust/rust-system.h`

gcc/rust/ChangeLog:

* rust-system.h: Add system include <stack>

Signed-off-by: SIGMazer <mazinasd7@gmail.com>
14 months agoAdd call and method call default visitors
Owen Avery [Thu, 29 Feb 2024 01:18:14 +0000 (20:18 -0500)] 
Add call and method call default visitors

gcc/rust/ChangeLog:

* resolve/rust-default-resolver.cc
(DefaultResolver::visit):
New for AST::CallExpr and AST::MethodCallExpr.
* resolve/rust-default-resolver.h
(DefaultResolver::visit): Likewise.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
14 months agoRemove useless cstddef header from rust-fmt
jjasmine [Sun, 19 May 2024 02:58:51 +0000 (19:58 -0700)] 
Remove useless cstddef header from rust-fmt

gcc/rust/ChangeLog:

* ast/rust-fmt.h:  Remove useless cstddef header from rust-fmt