Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reduce the amount of raw pointer the HIR API #2878

Open
wants to merge 7 commits into
base: master
Choose a base branch
from

Commits on Oct 14, 2024

  1. Refactor HIR to reduce the amount of raw pointers

    Attempt to use references and smart pointers whenever possible.
    
    gcc/rust/ChangeLog:
    
    	* backend/rust-compile-base.cc (HIRCompileBase::compile_function_body):
    	Remove usage of get function to retrieve a raw pointer.
    	* backend/rust-compile-base.h:
    	Change API usage from raw pointer to a reference.
    	* backend/rust-compile-block.cc (CompileBlock::compile): Likewise.
    	(CompileBlock::visit): Likewise.
    	(CompileConditionalBlocks::visit): Likewise.
    	* backend/rust-compile-block.h: Likewise.
    	* backend/rust-compile-expr.cc (CompileExpr::Compile): Likewise.
    	(CompileExpr::visit): Likewise.
    	(check_match_scrutinee): Likewise.
    	(CompileExpr::array_value_expr): Likewise.
    	(CompileExpr::array_copied_expr): Likewise.
    	(CompileExpr::generate_closure_function): Likewise.
    	(CompileExpr::generate_possible_fn_trait_call): Likewise.
    	* backend/rust-compile-expr.h: Likewise.
    	* backend/rust-compile-fnparam.cc (CompileFnParam::compile): Likewise.
    	(CompileFnParam::visit): Likewise.
    	* backend/rust-compile-fnparam.h: Likewise.
    	* backend/rust-compile-implitem.cc (CompileTraitItem::visit): Likewise.
    	* backend/rust-compile-intrinsic.cc (compile_fn_params): Likewise.
    	* backend/rust-compile-item.cc (CompileItem::visit): Likewise.
    	* backend/rust-compile-pattern.cc (CompilePatternCheckExpr::visit):
    	Likewise.
    	(compile_range_pattern_bound): Likewise.
    	(CompilePatternBindings::visit): Likewise.
    	(CompilePatternLet::visit): Likewise.
    	* backend/rust-compile-pattern.h: Likewise.
    	* backend/rust-compile-resolve-path.cc (ResolvePathRef::resolve):
    	Likewise.
    	(HIRCompileBase::query_compile): Likewise.
    	* backend/rust-compile-stmt.cc (CompileStmt::visit): Likewise.
    	* backend/rust-compile-struct-field-expr.cc (CompileStructExprField::Compile):
    	Likewise.
    	(CompileStructExprField::visit): Likewise.
    	* backend/rust-compile-struct-field-expr.h: Likewise.
    	* backend/rust-compile-type.cc (TyTyResolveCompile::visit): Likewise.
    	* backend/rust-compile-var-decl.h: Likewise.
    	* backend/rust-compile.cc: Likewise.
    	* backend/rust-mangle-v0.cc (v0_inherent_or_trait_impl_path): Likewise.
    	* checks/errors/borrowck/rust-bir-builder-expr-stmt.cc (ExprStmtBuilder::visit):
    	Likewise.
    	* checks/errors/borrowck/rust-bir-builder-lazyboolexpr.h: Likewise.
    	* checks/errors/borrowck/rust-bir-builder-pattern.h: Likewise.
    	* checks/errors/borrowck/rust-bir-builder-struct.h: Likewise.
    	* checks/errors/borrowck/rust-bir-builder.h: Likewise.
    	* checks/errors/borrowck/rust-function-collector.h: Likewise.
    	* checks/errors/privacy/rust-privacy-reporter.cc (PrivacyReporter::check_type_privacy):
    	Likewise.
    	(PrivacyReporter::visit): Likewise.
    	* checks/errors/privacy/rust-privacy-reporter.h: Likewise.
    	* checks/errors/privacy/rust-reachability.cc (ReachabilityVisitor::visit):
    	Likewise.
    	* checks/errors/rust-const-checker.cc (ConstChecker::visit): Likewise.
    	* checks/errors/rust-unsafe-checker.cc (UnsafeChecker::visit):
    	Likewise.
    	* checks/lints/rust-lint-marklive.cc (MarkLive::visit): Likewise.
    	* checks/lints/rust-lint-marklive.h: Likewise.
    	* hir/rust-hir-dump.cc (Dump::visit): Likewise.
    	* hir/tree/rust-hir-expr.h: Likewise.
    	* hir/tree/rust-hir-item.h: Likewise.
    	* hir/tree/rust-hir-path.h: Likewise.
    	* hir/tree/rust-hir-pattern.h: Likewise.
    	* hir/tree/rust-hir-stmt.h: Likewise.
    	* hir/tree/rust-hir-type.h: Likewise.
    	* hir/tree/rust-hir.h: Likewise.
    	* typecheck/rust-autoderef.cc: Likewise.
    	* typecheck/rust-hir-dot-operator.cc (MethodResolver::select):
    	Likewise.
    	* typecheck/rust-hir-inherent-impl-overlap.h: Likewise.
    	* typecheck/rust-hir-path-probe.cc (PathProbeType::process_impl_item_candidate):
    	Likewise.
    	(PathProbeImplTrait::process_trait_impl_items_for_candidates): Likewise.
    	* typecheck/rust-hir-trait-resolve.cc (TraitResolver::resolve_trait):
    	Likewise.
    	(TraitItemReference::resolve_item): Likewise.
    	* typecheck/rust-hir-type-check-base.cc: Likewise.
    	* typecheck/rust-hir-type-check-base.h: Likewise.
    	* typecheck/rust-hir-type-check-enumitem.cc (TypeCheckEnumItem::Resolve):
    	Likewise.
    	(TypeCheckEnumItem::visit): Likewise.
    	* typecheck/rust-hir-type-check-enumitem.h: Likewise.
    	* typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::Resolve):
    	Likewise.
    	(TypeCheckExpr::visit): Likewise.
    	(TypeCheckExpr::resolve_fn_trait_call): Likewise.
    	* typecheck/rust-hir-type-check-expr.h: Likewise.
    	* typecheck/rust-hir-type-check-implitem.cc (TypeCheckTopLevelExternItem::Resolve):
    	Likewise.
    	(TypeCheckTopLevelExternItem::visit): Likewise.
    	(TypeCheckImplItem::visit): Likewise.
    	(TypeCheckImplItemWithTrait::visit): Likewise.
    	* typecheck/rust-hir-type-check-implitem.h: Likewise.
    	* typecheck/rust-hir-type-check-item.cc (TypeCheckItem::visit): Likewise.
    	(TypeCheckItem::resolve_impl_item): Likewise.
    	(TypeCheckItem::resolve_impl_block_substitutions): Likewise.
    	(TypeCheckItem::resolve_impl_block_self): Likewise.
    	* typecheck/rust-hir-type-check-path.cc (TypeCheckExpr::visit): Likewise.
    	(TypeCheckExpr::resolve_segments): Likewise.
    	* typecheck/rust-hir-type-check-pattern.cc (TypeCheckPattern::Resolve):
    	Likewise.
    	(TypeCheckPattern::visit): Likewise.
    	(ClosureParamInfer::Resolve): Likewise.
    	(ClosureParamInfer::visit): Likewise.
    	* typecheck/rust-hir-type-check-pattern.h: Likewise.
    	* typecheck/rust-hir-type-check-stmt.cc (TypeCheckStmt::Resolve):
    	Likewise.
    	(TypeCheckStmt::visit): Likewise.
    	* typecheck/rust-hir-type-check-stmt.h: Likewise.
    	* typecheck/rust-hir-type-check-struct-field.h: Likewise.
    	* typecheck/rust-hir-type-check-struct.cc (TypeCheckStructExpr::TypeCheckStructExpr):
    	Likewise.
    	(TypeCheckStructExpr::Resolve): Likewise.
    	(TypeCheckStructExpr::resolve): Likewise.
    	(TypeCheckStructExpr::visit): Likewise.
    	* typecheck/rust-hir-type-check-type.cc (TypeCheckResolveGenericArguments::resolve):
    	Likewise.
    	(TypeCheckType::Resolve): Likewise.
    	(TypeCheckType::visit): Likewise.
    	(TypeCheckType::resolve_root_path): Likewise.
    	(TypeResolveGenericParam::Resolve): Likewise.
    	(TypeResolveGenericParam::visit): Likewise.
    	(ResolveWhereClauseItem::visit): Likewise.
    	* typecheck/rust-hir-type-check-type.h: Likewise.
    	* typecheck/rust-hir-type-check.cc (TraitItemReference::get_type_from_fn):
    	Likewise.
    	* typecheck/rust-hir-type-check.h: Likewise.
    	* typecheck/rust-type-util.cc (query_type): Likewise.
    	* typecheck/rust-typecheck-context.cc (TypeCheckContextItem::TypeCheckContextItem):
    	Likewise.
    	* typecheck/rust-tyty-bounds.cc (TypeBoundsProbe::scan): Likewise.
    	(TypeCheckBase::get_predicate_from_bound): Likewise.
    	* typecheck/rust-tyty-call.cc (TypeCheckCallExpr::visit): Likewise.
    	(TypeCheckMethodCallExpr::go): Likewise.
    	(TypeCheckMethodCallExpr::check): Likewise.
    	* typecheck/rust-tyty-subst.cc: Likewise.
    	* typecheck/rust-tyty.cc (BaseType::monomorphized_clone): Likewise.
    	(VariantDef::VariantDef): Remove copy constructor.
    	(VariantDef::operator=): Change to move operator.
    	(VariantDef::get_discriminant): Replace return type to a reference
    	instead of a reference to a unique pointer.
    	(VariantDef::clone): Change to references.
    	(VariantDef::monomorphized_clone): Likewise.
    	(FnType::as_string): Likewise.
    	(FnType::clone): Likewise.
    	* typecheck/rust-tyty.h: Likewise.
    	* util/rust-hir-map.cc (Mappings::insert_hir_impl_block): Likewise.
    
    Signed-off-by: Pierre-Emmanuel Patry <[email protected]>
    P-E-P committed Oct 14, 2024
    Configuration menu
    Copy the full SHA
    06cd156 View commit details
    Browse the repository at this point in the history
  2. WIP stuff on hir refactor

    gcc/rust/ChangeLog:
    
    	* backend/rust-compile-base.cc:
    	* backend/rust-compile-expr.cc (CompileExpr::visit):
    	* backend/rust-compile-intrinsic.cc (compile_fn_params):
    	(transmute_handler):
    	(assume_handler):
    	* backend/rust-compile-type.cc (TyTyResolveCompile::visit):
    	* checks/errors/borrowck/rust-bir-builder-expr-stmt.cc (ExprStmtBuilder::visit):
    	* checks/errors/privacy/rust-privacy-reporter.cc (PrivacyReporter::visit):
    	* checks/errors/rust-unsafe-checker.cc (UnsafeChecker::visit):
    	* hir/tree/rust-hir-expr.h:
    	* hir/tree/rust-hir-item.h:
    	* hir/tree/rust-hir.h:
    	* typecheck/rust-hir-dot-operator.cc (MethodResolver::Select):
    	* typecheck/rust-hir-type-check-expr.cc:
    	* typecheck/rust-hir-type-check-implitem.cc (TypeCheckTopLevelExternItem::visit):
    	(TypeCheckImplItem::visit):
    	* typecheck/rust-hir-type-check-item.cc (TypeCheckItem::visit):
    	* typecheck/rust-hir-type-check.cc (TraitItemReference::get_type_from_fn):
    	* typecheck/rust-tyty-call.cc (TypeCheckCallExpr::visit):
    	(TypeCheckMethodCallExpr::check):
    	* typecheck/rust-tyty-cmp.h:
    	* typecheck/rust-tyty.cc (BaseType::monomorphized_clone):
    	(BaseType::is_concrete):
    	(FnType::as_string):
    	(FnType::is_equal):
    	(FnType::clone):
    	(FnType::handle_substitions):
    	* typecheck/rust-tyty.h (class FnParam):
    	* typecheck/rust-unify.cc (UnifyRules::expect_fndef):
    	(UnifyRules::expect_fnptr):
    
    Signed-off-by: Pierre-Emmanuel Patry <[email protected]>
    P-E-P committed Oct 14, 2024
    Configuration menu
    Copy the full SHA
    1964fcc View commit details
    Browse the repository at this point in the history

Commits on Oct 16, 2024

  1. Use more smart pointers in HIR member functions

    gcc/rust/ChangeLog:
    
    	* checks/lints/rust-lint-marklive.h:
    	* hir/rust-ast-lower-expr.cc (ASTLoweringExpr::visit):
    	* hir/rust-hir-dump.cc (Dump::visit):
    	* hir/tree/rust-hir-expr.h (RUST_HIR_EXPR_H):
    	(class ArrayElemsValues):
    	(class TupleExpr):
    	(struct StructBase):
    	(class StructExprStructFields):
    	(class CallExpr):
    	(class MethodCallExpr):
    	(class WhileLetLoopExpr):
    	(class IfLetExpr):
    	* hir/tree/rust-hir-path.h:
    	* hir/tree/rust-hir-type.h:
    	* hir/tree/rust-hir.cc (TypePath::to_trait_bound):
    	(StructExprStructFields::as_string):
    	* hir/tree/rust-hir.h:
    	* typecheck/rust-hir-type-check-struct.cc (TypeCheckStructExpr::resolve):
    	* typecheck/rust-tyty-bounds.cc:
    
    Signed-off-by: Pierre-Emmanuel Patry <[email protected]>
    P-E-P committed Oct 16, 2024
    Configuration menu
    Copy the full SHA
    24de06b View commit details
    Browse the repository at this point in the history

Commits on Oct 21, 2024

  1. Tag function as override.

    gcc/rust/ChangeLog:
    
    	* checks/errors/rust-unsafe-checker.h: Function overrides and produce
    	a warning on some compilers, properly tagging it as override silent it.
    
    Signed-off-by: Pierre-Emmanuel Patry <[email protected]>
    P-E-P committed Oct 21, 2024
    Configuration menu
    Copy the full SHA
    0370883 View commit details
    Browse the repository at this point in the history
  2. Refactor hir to avoid raw pointers and unneeded fwd

    Refactor the hir tree files to remove raw pointer usage and most forward
    declarations. Move implementation out of headers and split headers into
    smaller and more manageable units.
    
    gcc/rust/ChangeLog:
    
    	* Make-lang.in: Add new files.
    	* hir/tree/rust-hir-item.h: Move Item definition and remove
    	implementations to their corresponding cc file.
    	* hir/tree/rust-hir-expr.h: Move implementation to the corresponding
    	cc file.
    	* hir/tree/rust-hir-path.h: Likewise.
    	* hir/tree/rust-hir-pattern.h: Likewise.
    	* hir/tree/rust-hir-stmt.h: Likewise.
    	* hir/tree/rust-hir-type.h: Likewise.
    	* hir/tree/rust-hir-visitor.h: Likewise.
    	* hir/tree/rust-hir.h: Likewise.
    	* hir/tree/rust-hir.cc (Crate::Crate): Add implementations from Crate
    	and remove ConstGenericParam implementations to move them to their
    	own file.
    	* hir/tree/rust-hir-attrs.h: New file.
    	* hir/tree/rust-hir-bound-abstract.h: New file.
    	* hir/tree/rust-hir-bound.h: New file.
    	* hir/tree/rust-hir-expr-abstract.h: New file.
    	* hir/tree/rust-hir-expr.cc: New file.
    	* hir/tree/rust-hir-generic-param.cc: New file.
    	* hir/tree/rust-hir-generic-param.h: New file.
    	* hir/tree/rust-hir-item.cc: New file.
    	* hir/tree/rust-hir-literal.h: New file.
    	* hir/tree/rust-hir-node.h: New file.
    	* hir/tree/rust-hir-path.cc: New file.
    	* hir/tree/rust-hir-pattern-abstract.h: New file.
    	* hir/tree/rust-hir-simple-path.h: New file.
    	* hir/tree/rust-hir-stmt.cc: New file.
    	* hir/tree/rust-hir-trait-bound.h: New file.
    	* hir/tree/rust-hir-type-abstract.cc: New file.
    	* hir/tree/rust-hir-type-abstract.h: New file.
    	* hir/tree/rust-hir-type-no-bounds.h: New file.
    	* hir/tree/rust-hir-type.cc: New file.
    	* hir/tree/rust-hir-visibility.h: New file.
    	* hir/tree/rust-hir-visitable.h: New file.
    
    Signed-off-by: Pierre-Emmanuel Patry <[email protected]>
    P-E-P committed Oct 21, 2024
    Configuration menu
    Copy the full SHA
    3cb72c8 View commit details
    Browse the repository at this point in the history

Commits on Nov 6, 2024

  1. Fixes some tests appearing with a moved variant

    A variant being moved lead to a null being created and a segfault later
    down the line.
    
    gcc/rust/ChangeLog:
    
    	* backend/rust-compile-expr.cc (CompileExpr::visit): Call getter
    	instead of size function.
    	* checks/errors/privacy/rust-privacy-reporter.cc (PrivacyReporter::visit):
    	Only check privacy if the type is present.
    	* hir/rust-ast-lower-stmt.cc (ASTLoweringStmt::visit): Use an optional.
    	* hir/tree/rust-hir-generic-param.h: Assert type before getting it.
    	* hir/tree/rust-hir-item.h: Assert pointers before dereference, fix
    	has_type condition.
    	* hir/tree/rust-hir-path.h: Add more assertions.
    	* hir/tree/rust-hir-stmt.cc: Change constructor with optionals.
    	* hir/tree/rust-hir-stmt.h: Use optionals over smart pointers to
    	emphasize these fields might be missing.
    	* hir/tree/rust-hir.cc (LetStmt::as_string): Use getters.
    	* typecheck/rust-hir-type-check-expr.cc: Clone structures to prevent
    	parent's fields from being nulled by the move operation.
    	* typecheck/rust-hir-type-check-item.cc (TypeCheckItem::visit): Use
    	optionals.
    	* typecheck/rust-tyty.cc: Likewise.
    	* typecheck/rust-tyty.h: Likewise.
    
    Signed-off-by: Pierre-Emmanuel Patry <[email protected]>
    P-E-P committed Nov 6, 2024
    Configuration menu
    Copy the full SHA
    93d5288 View commit details
    Browse the repository at this point in the history

Commits on Nov 8, 2024

  1. Fix Generic type retrieval

    gcc/rust/ChangeLog:
    
    	* hir/rust-ast-lower-type.cc (ASTLowerGenericParam::visit): Forward
    	an optional to the constructor.
    	* hir/tree/rust-hir-item.cc (TypeParam::TypeParam): Use an optional
    	in the constructor.
    	(TypeParam::operator=): Ensure the TypeParam has a type properly.
    	(TypeParam::get_type_mappings): Likewise.
    	* hir/tree/rust-hir-item.h: Wrap the type smart pointer into an
    	optional.
    	* hir/tree/rust-hir.cc (TypeParam::as_string): Unwrap optional type
    	correctly.
    
    Signed-off-by: Pierre-Emmanuel Patry <[email protected]>
    P-E-P committed Nov 8, 2024
    Configuration menu
    Copy the full SHA
    0b48ac6 View commit details
    Browse the repository at this point in the history