diff options
author | Arthur Cohen <arthur.cohen@embecosm.com> | 2023-07-09 13:44:52 +0200 |
---|---|---|
committer | Philip Herron <philip.herron@embecosm.com> | 2023-07-14 17:03:20 +0000 |
commit | 866512cbc09bc883ef844b2b6cb70a72335756a7 (patch) | |
tree | 3048b3a58c729e52362df0313893d0f3c67766b4 /gcc/rust/backend | |
parent | a34d6675726d3c88c4c1d2860ea00884a36406f2 (diff) | |
download | gcc-866512cbc09bc883ef844b2b6cb70a72335756a7.zip gcc-866512cbc09bc883ef844b2b6cb70a72335756a7.tar.gz gcc-866512cbc09bc883ef844b2b6cb70a72335756a7.tar.bz2 |
rust-unreachable: Add specific behavior for rust_unreachable
As discussed during the community call, rust_unreachable() should
always trigger an internal compiler error and should not offer
the behavior of __builtin_unreachable when asserts are disabled, unlike
gcc_unreachable().
gcc/rust/ChangeLog:
* rust-system.h (rust_unreachable): Change definition to fancy_abort
* ast/rust-ast-collector.cc (TokenCollector::visit): Use rust_unreachable
instead of gcc_unreachable.
(get_delimiters): Likewise.
* ast/rust-ast-dump.h: Likewise.
* ast/rust-ast-formatting.cc (get_string_in_delims): Likewise.
(get_mode_dump_desc): Likewise.
* ast/rust-ast.cc (Visibility::as_string): Likewise.
(UseTreeGlob::as_string): Likewise.
* ast/rust-ast.h: Likewise.
* ast/rust-macro.h: Likewise.
* ast/rust-path.h: Likewise.
* backend/rust-compile-expr.cc (sort_tuple_patterns): Likewise.
(CompileExpr::visit): Likewise.
(CompileExpr::generate_closure_fntype): Likewise.
* backend/rust-compile-intrinsic.cc (op_with_overflow_inner): Likewise.
* backend/rust-compile-pattern.cc (CompilePatternBindings::visit): Likewise.
(CompilePatternLet::visit): Likewise.
* backend/rust-constexpr.cc (base_field_constructor_elt): Likewise.
(eval_array_reference): Likewise.
(label_matches): Likewise.
(eval_store_expression): Likewise.
(eval_call_expression): Likewise.
(build_data_member_initialization): Likewise.
(array_index_cmp): Likewise.
(get_array_or_vector_nelts): Likewise.
(eval_bit_field_ref): Likewise.
(eval_loop_expr): Likewise.
(potential_constant_expression_1): Likewise.
* backend/rust-mangle.cc (v0_simple_type_prefix): Likewise.
(v0_type_prefix): Likewise.
(v0_mangle_item): Likewise.
(Mangler::mangle_item): Likewise.
* backend/rust-tree.cc (convert_to_void): Likewise.
(type_memfn_quals): Likewise.
(rs_tree_equal): Likewise.
(fold_offsetof): Likewise.
(fold_builtin_source_location): Likewise.
(lvalue_error): Likewise.
* backend/rust-tree.h (struct named_decl_hash): Likewise.
(struct named_label_hash): Likewise.
* checks/errors/privacy/rust-visibility-resolver.cc
(VisibilityResolver::resolve_visibility): Likewise.
(VisibilityResolver::visit): Likewise.
* checks/errors/rust-const-checker.cc (ConstChecker::ctx_to_str): Likewise.
* checks/errors/rust-feature.cc (Feature::create): Likewise.
* expand/rust-expand-visitor.cc (get_traits_to_derive): Likewise.
(derive_item): Likewise.
(expand_item_attribute): Likewise.
(expand_stmt_attribute): Likewise.
* expand/rust-macro-expand.cc (MacroExpander::match_matcher): Likewise.
(MacroExpander::match_repetition): Likewise.
(transcribe_context): Likewise.
(MacroExpander::import_proc_macros): Likewise.
(MacroExpander::parse_proc_macro_output): Likewise.
* expand/rust-macro-expand.h: Likewise.
* expand/rust-macro-invoc-lexer.h: Likewise.
* expand/rust-macro-substitute-ctx.cc (SubstituteCtx::substitute_token): Likewise.
* expand/rust-proc-macro-invoc-lexer.h: Likewise.
* expand/rust-proc-macro.cc (load_macros): Likewise.
* hir/rust-ast-lower-base.cc (ASTLoweringBase::lower_generic_args): Likewise.
(ASTLoweringBase::lower_literal): Likewise.
* hir/rust-ast-lower-expr.cc (ASTLoweringExpr::visit): Likewise.
* hir/rust-ast-lower-pattern.cc (ASTLoweringPattern::visit): Likewise.
* hir/rust-ast-lower-type.cc (ASTLoweringType::visit): Likewise.
* hir/rust-hir-dump.cc (Dump::visit): Likewise.
* hir/tree/rust-hir.cc (get_string_in_delims): Likewise.
(Visibility::as_string): Likewise.
(UseTreeGlob::as_string): Likewise.
(CompoundAssignmentExpr::as_string): Likewise.
(ArithmeticOrLogicalExpr::as_string): Likewise.
* lex/rust-lex.cc (Lexer::parse_byte_string): Likewise.
(Lexer::parse_string): Likewise.
* lex/rust-token.cc (RS_TOKEN): Likewise.
* parse/rust-parse-impl.h (Parser::parse_simple_path_segment): Likewise.
(Parser::parse_path_ident_segment): Likewise.
(Parser::parse_attr_input): Likewise.
(Parser::parse_inherent_impl_item): Likewise.
(Parser::parse_trait_impl_item): Likewise.
(Parser::parse_type_path_segment): Likewise.
(Parser::parse_reference_type): Likewise.
(get_lbp_for_comparison_expr): Likewise.
* parse/rust-parse.cc (peculiar_fragment_match_compatible): Likewise.
* resolve/rust-ast-resolve-path.cc (ResolvePath::resolve_path): Likewise.
* resolve/rust-ast-resolve-pattern.cc (PatternDeclaration::visit): Likewise.
* resolve/rust-ast-resolve-type.cc (ResolveRelativeTypePath::go): Likewise.
(ResolveTypeToCanonicalPath::visit): Likewise.
(ResolveGenericArgs::resolve_disambiguated_generic): Likewise.
* rust-gcc.cc (operator_to_tree_code): Likewise.
(fetch_overflow_builtins): Likewise.
(Gcc_backend::non_zero_size_type): Likewise.
(Gcc_backend::convert_tree): Likewise.
* rust-lang.cc (grs_langhook_type_for_mode): Likewise.
(grs_langhook_global_bindings_p): Likewise.
(grs_langhook_pushdecl): Likewise.
(grs_langhook_getdecls): Likewise.
(convert): Likewise.
* typecheck/rust-autoderef.h: Likewise.
* typecheck/rust-hir-path-probe.cc: Likewise.
* typecheck/rust-hir-trait-reference.cc (TraitItemReference::get_tyty): Likewise.
* typecheck/rust-hir-type-check-base.cc (TypeCheckBase::resolve_literal): Likewise.
* typecheck/rust-hir-type-check-expr.cc: Likewise.
* typecheck/rust-hir-type-check-expr.h: Likewise.
* typecheck/rust-hir-type-check-implitem.cc (TypeCheckImplItem::visit): Likewise.
* typecheck/rust-hir-type-check-pattern.cc (TypeCheckPattern::visit): Likewise.
* typecheck/rust-hir-type-check-stmt.h: Likewise.
* typecheck/rust-hir-type-check.cc (TraitItemReference::get_type_from_fn): Likewise.
* typecheck/rust-substitution-mapper.h: Likewise.
* typecheck/rust-typecheck-context.cc (TypeCheckContextItem::get_context_type): Likewise.
* typecheck/rust-tyty-call.h: Likewise.
* typecheck/rust-tyty.cc (TypeKindFormat::to_string): Likewise.
(BaseType::monomorphized_clone): Likewise.
(VariantDef::variant_type_string): Likewise.
(ClosureType::handle_substitions): Likewise.
(IntType::as_string): Likewise.
(UintType::as_string): Likewise.
(FloatType::as_string): Likewise.
* typecheck/rust-unify.cc (UnifyRules::expect_projection): Likewise.
* util/rust-token-converter.cc (convert): Likewise.
(from_literal): Likewise.
(from_group): Likewise.
(from_tokentree): Likewise.
Diffstat (limited to 'gcc/rust/backend')
-rw-r--r-- | gcc/rust/backend/rust-compile-expr.cc | 12 | ||||
-rw-r--r-- | gcc/rust/backend/rust-compile-intrinsic.cc | 2 | ||||
-rw-r--r-- | gcc/rust/backend/rust-compile-pattern.cc | 8 | ||||
-rw-r--r-- | gcc/rust/backend/rust-constexpr.cc | 22 | ||||
-rw-r--r-- | gcc/rust/backend/rust-mangle.cc | 8 | ||||
-rw-r--r-- | gcc/rust/backend/rust-tree.cc | 22 | ||||
-rw-r--r-- | gcc/rust/backend/rust-tree.h | 4 |
7 files changed, 39 insertions, 39 deletions
diff --git a/gcc/rust/backend/rust-compile-expr.cc b/gcc/rust/backend/rust-compile-expr.cc index b46574d..905f696 100644 --- a/gcc/rust/backend/rust-compile-expr.cc +++ b/gcc/rust/backend/rust-compile-expr.cc @@ -1117,7 +1117,7 @@ sort_tuple_patterns (HIR::MatchExpr &expr) else /* TuplePatternItemType::RANGED */ { // FIXME - gcc_unreachable (); + rust_unreachable (); } } @@ -1430,25 +1430,25 @@ CompileExpr::visit (HIR::MatchExpr &expr) else { // FIXME: There are other cases, but it better not be a Tuple - gcc_unreachable (); + rust_unreachable (); } } break; case HIR::Expr::ExprType::Path: { // FIXME - gcc_unreachable (); + rust_unreachable (); } break; default: - gcc_unreachable (); + rust_unreachable (); } } else { // FIXME: match on other types of expressions not yet implemented. - gcc_unreachable (); + rust_unreachable (); } // setup the end label so the cases can exit properly @@ -2856,7 +2856,7 @@ CompileExpr::generate_closure_fntype (HIR::ClosureExpr &expr, else { // FIXME error message? - gcc_unreachable (); + rust_unreachable (); return error_mark_node; } diff --git a/gcc/rust/backend/rust-compile-intrinsic.cc b/gcc/rust/backend/rust-compile-intrinsic.cc index 0034f1e..0521d85 100644 --- a/gcc/rust/backend/rust-compile-intrinsic.cc +++ b/gcc/rust/backend/rust-compile-intrinsic.cc @@ -627,7 +627,7 @@ op_with_overflow_inner (Context *ctx, TyTy::FnType *fntype, tree_code op) break; default: - gcc_unreachable (); + rust_unreachable (); break; } rust_assert (overflow_builtin != error_mark_node); diff --git a/gcc/rust/backend/rust-compile-pattern.cc b/gcc/rust/backend/rust-compile-pattern.cc index de4bc2f..94c86df 100644 --- a/gcc/rust/backend/rust-compile-pattern.cc +++ b/gcc/rust/backend/rust-compile-pattern.cc @@ -199,7 +199,7 @@ CompilePatternBindings::visit (HIR::TupleStructPattern &pattern) { case HIR::TupleStructItems::RANGE: { // TODO - gcc_unreachable (); + rust_unreachable (); } break; @@ -284,13 +284,13 @@ CompilePatternBindings::visit (HIR::StructPattern &pattern) { case HIR::StructPatternField::ItemType::TUPLE_PAT: { // TODO - gcc_unreachable (); + rust_unreachable (); } break; case HIR::StructPatternField::ItemType::IDENT_PAT: { // TODO - gcc_unreachable (); + rust_unreachable (); } break; @@ -467,7 +467,7 @@ CompilePatternLet::visit (HIR::TuplePattern &pattern) return; } default: { - gcc_unreachable (); + rust_unreachable (); } } } diff --git a/gcc/rust/backend/rust-constexpr.cc b/gcc/rust/backend/rust-constexpr.cc index 5d9c0a8..444aa14 100644 --- a/gcc/rust/backend/rust-constexpr.cc +++ b/gcc/rust/backend/rust-constexpr.cc @@ -1132,7 +1132,7 @@ base_field_constructor_elt (vec<constructor_elt, va_gc> *v, tree ref) if (ce->index == field) return ce; - gcc_unreachable (); + rust_unreachable (); return NULL; } @@ -1618,7 +1618,7 @@ eval_array_reference (const constexpr_ctx *ctx, tree t, bool lval, /* We can't do anything with other tree codes, so use VERIFY_CONSTANT to complain and fail. */ VERIFY_CONSTANT (ary); - gcc_unreachable (); + rust_unreachable (); } bool found; @@ -1855,7 +1855,7 @@ label_matches (const constexpr_ctx *ctx, tree *jump_target, tree stmt) break; default: - gcc_unreachable (); + rust_unreachable (); } return false; } @@ -2695,7 +2695,7 @@ eval_store_expression (const constexpr_ctx *ctx, tree t, bool lval, if (TREE_CODE (probe) == ARRAY_REF) { // TODO - gcc_unreachable (); + rust_unreachable (); // elt = eval_and_check_array_index (ctx, probe, false, // non_constant_p, overflow_p); if (*non_constant_p) @@ -3372,7 +3372,7 @@ eval_call_expression (const constexpr_ctx *ctx, tree t, bool lval, { // return cxx_eval_internal_function (ctx, t, lval, // non_constant_p, overflow_p); - gcc_unreachable (); + rust_unreachable (); return error_mark_node; } @@ -3876,7 +3876,7 @@ build_data_member_initialization (tree t, vec<constructor_elt, va_gc> **vec) // goto found; // // default: -// gcc_unreachable (); +// rust_unreachable (); // } // found: // @@ -4143,7 +4143,7 @@ array_index_cmp (tree key, tree index) return 0; } default: - gcc_unreachable (); + rust_unreachable (); } } @@ -4435,7 +4435,7 @@ get_array_or_vector_nelts (const constexpr_ctx *ctx, tree type, else if (VECTOR_TYPE_P (type)) nelts = size_int (TYPE_VECTOR_SUBPARTS (type)); else - gcc_unreachable (); + rust_unreachable (); /* For VLAs, the number of elements won't be an integer constant. */ nelts @@ -4787,7 +4787,7 @@ eval_bit_field_ref (const constexpr_ctx *ctx, tree t, bool lval, } if (fld_seen) return fold_convert (TREE_TYPE (t), retval); - gcc_unreachable (); + rust_unreachable (); return error_mark_node; } @@ -4876,7 +4876,7 @@ eval_loop_expr (const constexpr_ctx *ctx, tree t, bool *non_constant_p, count = -1; break; default: - gcc_unreachable (); + rust_unreachable (); } auto_vec<tree, 10> save_exprs; new_ctx.save_exprs = &save_exprs; @@ -6433,7 +6433,7 @@ potential_constant_expression_1 (tree t, bool want_rval, bool strict, bool now, default: sorry ("unexpected AST of kind %s", get_tree_code_name (TREE_CODE (t))); - gcc_unreachable (); + rust_unreachable (); return false; } #undef RECUR diff --git a/gcc/rust/backend/rust-mangle.cc b/gcc/rust/backend/rust-mangle.cc index 83aefa7..8a1a73c 100644 --- a/gcc/rust/backend/rust-mangle.cc +++ b/gcc/rust/backend/rust-mangle.cc @@ -193,7 +193,7 @@ v0_simple_type_prefix (const TyTy::BaseType *ty) return ""; } - gcc_unreachable (); + rust_unreachable (); } // Add an underscore-terminated base62 integer to the mangling string. @@ -262,7 +262,7 @@ v0_type_prefix (const TyTy::BaseType *ty) return ty_prefix; // FIXME: We need to fetch more type prefixes - gcc_unreachable (); + rust_unreachable (); } static std::string @@ -291,7 +291,7 @@ v0_mangle_item (const TyTy::BaseType *ty, const Resolver::CanonicalPath &path) v0_add_identifier (mangled, crate_name); v0_add_disambiguator (mangled, 62); - gcc_unreachable (); + rust_unreachable (); } std::string @@ -305,7 +305,7 @@ Mangler::mangle_item (const TyTy::BaseType *ty, case Mangler::MangleVersion::V0: return v0_mangle_item (ty, path); default: - gcc_unreachable (); + rust_unreachable (); } } diff --git a/gcc/rust/backend/rust-tree.cc b/gcc/rust/backend/rust-tree.cc index 8243d4c..de79a02 100644 --- a/gcc/rust/backend/rust-tree.cc +++ b/gcc/rust/backend/rust-tree.cc @@ -384,7 +384,7 @@ convert_to_void (tree expr, impl_conv_void implicit) type); break; default: - gcc_unreachable (); + rust_unreachable (); } } /* Don't load the value if this is an implicit dereference, or if @@ -440,7 +440,7 @@ convert_to_void (tree expr, impl_conv_void implicit) type); break; default: - gcc_unreachable (); + rust_unreachable (); } } else if (is_volatile && TREE_ADDRESSABLE (type)) @@ -495,7 +495,7 @@ convert_to_void (tree expr, impl_conv_void implicit) type); break; default: - gcc_unreachable (); + rust_unreachable (); } } if (is_reference || !is_volatile || !is_complete @@ -573,7 +573,7 @@ convert_to_void (tree expr, impl_conv_void implicit) expr, type); break; default: - gcc_unreachable (); + rust_unreachable (); } break; @@ -1311,7 +1311,7 @@ type_memfn_quals (const_tree type) else if (TREE_CODE (type) == METHOD_TYPE) return rs_type_quals (class_of_this_parm (type)); else - gcc_unreachable (); + rust_unreachable (); } // forked from gcc/cp/pt.cc find_parameter_pack_data @@ -1882,7 +1882,7 @@ rs_tree_equal (tree t1, tree t2) case VOID_CST: /* There's only a single VOID_CST node, so we should never reach here. */ - gcc_unreachable (); + rust_unreachable (); case INTEGER_CST: return tree_int_cst_equal (t1, t2); @@ -2049,7 +2049,7 @@ rs_tree_equal (tree t1, tree t2) return same_type_p (t1, t2); default: - gcc_unreachable (); + rust_unreachable (); } /* We can get here with --disable-checking. */ @@ -3645,7 +3645,7 @@ fold_offsetof (tree expr, tree type, enum tree_code ctx) return fold_offsetof (t, type); default: - gcc_unreachable (); + rust_unreachable (); } if (!POINTER_TYPE_P (type)) @@ -3922,7 +3922,7 @@ retry: break; default: - gcc_unreachable (); + rust_unreachable (); } } @@ -4817,7 +4817,7 @@ fold_builtin_source_location (location_t loc) else if (strcmp (n, "_M_column") == 0) val = build_int_cst (TREE_TYPE (field), LOCATION_COLUMN (loc)); else - gcc_unreachable (); + rust_unreachable (); CONSTRUCTOR_APPEND_ELT (v, field, val); } @@ -5943,7 +5943,7 @@ lvalue_error (location_t loc, enum lvalue_use use) error_at (loc, "lvalue required in %<asm%> statement"); break; default: - gcc_unreachable (); + rust_unreachable (); } } diff --git a/gcc/rust/backend/rust-tree.h b/gcc/rust/backend/rust-tree.h index f896c05..8cb79b3 100644 --- a/gcc/rust/backend/rust-tree.h +++ b/gcc/rust/backend/rust-tree.h @@ -1958,7 +1958,7 @@ struct named_decl_hash : ggc_remove<tree> /* Nothing is deletable. Everything is insertable. */ static bool is_deleted (value_type) { return false; } - static void mark_deleted (value_type) { gcc_unreachable (); } + static void mark_deleted (value_type) { rust_unreachable (); } }; // forked from gcc/cp/cp-tree.h lang_decl_selector @@ -2168,7 +2168,7 @@ struct named_label_hash : ggc_remove<named_label_entry *> /* Nothing is deletable. Everything is insertable. */ inline static bool is_deleted (value_type) { return false; } - inline static void mark_deleted (value_type) { gcc_unreachable (); } + inline static void mark_deleted (value_type) { rust_unreachable (); } }; // forked from gcc/cp/cp-tree.h |