From e69e162462c6fb3d886460d96ce649207b7c9e3f Mon Sep 17 00:00:00 2001 From: Philip Herron Date: Mon, 25 Apr 2022 17:48:09 +0100 Subject: Support inference of generic parameters on paths behind reference's We used a hack in the parser to turn simple cases such as &Foo(..) into: BorrowExpr CallExpr( IdentifierExpr + )) The IdentifierExpr here is parsed as a PathExpression but to simplify things at the time it seemed logic to see these as identifier expressions but this is actually a Path and we need to be careful about generic arguments here. Identifiers are simply identifiers and must not be changed or coherence of inference variables will become a jumble of inference variables trying to infer one another inside purely generic code. This patch leaves the PathInExpressions as Path's instead of trying to be clever and turn them into identifiers. Fixes #1165 --- gcc/rust/parse/rust-parse-impl.h | 20 -------------------- 1 file changed, 20 deletions(-) (limited to 'gcc/rust/parse/rust-parse-impl.h') diff --git a/gcc/rust/parse/rust-parse-impl.h b/gcc/rust/parse/rust-parse-impl.h index 25979ce..6715a77 100644 --- a/gcc/rust/parse/rust-parse-impl.h +++ b/gcc/rust/parse/rust-parse-impl.h @@ -12591,16 +12591,6 @@ Parser::null_denotation (const_TokenPtr tok, // struct/enum expr struct if (!restrictions.can_be_struct_expr && !not_a_block) { - // assume path is returned if not single segment - if (path.is_single_segment ()) - { - // have to return an identifier expression or something - /* HACK: may have to become permanent, but this is my - * current identifier expression */ - return std::unique_ptr ( - new AST::IdentifierExpr (tok->get_str (), {}, - tok->get_locus ())); - } // HACK: add outer attrs to path path.set_outer_attrs (std::move (outer_attrs)); return std::unique_ptr ( @@ -12613,16 +12603,6 @@ Parser::null_denotation (const_TokenPtr tok, // struct/enum expr tuple if (!restrictions.can_be_struct_expr) { - // assume path is returned if not single segment - if (path.is_single_segment ()) - { - // have to return an identifier expression or something, idk - /* HACK: may have to become permanent, but this is my - * current identifier expression */ - return std::unique_ptr ( - new AST::IdentifierExpr (tok->get_str (), {}, - tok->get_locus ())); - } // HACK: add outer attrs to path path.set_outer_attrs (std::move (outer_attrs)); return std::unique_ptr ( -- cgit v1.1