rust/compiler
Matthias Krüger 69a8c139f1
Rollup merge of #124840 - bvanjoi:fix-124490, r=petrochenkov
resolve: mark it undetermined if single import is not has any bindings

- Fixes #124490
- Fixes #125013

This issue arises from incorrect resolution updates, for example:

```rust
mod a {
    pub mod b {
        pub mod c {}
    }
}

use a::*;

use b::c;
use c as b;

fn main() {}
```

1. In the first loop, binding `(root, b)` is refer to `root:🅰️:b` due to `use a::*`.
    1. However, binding `(root, c)` isn't defined by `use b::c` during this stage because `use c as b` falls under the `single_imports` of `(root, b)`, where the `imported_module` hasn't been computed yet. This results in marking the `path_res` for `b` as `Indeterminate`.
    2. Then, the `imported_module` for `use c as b` will be recorded.
2. In the second loop, `use b::c` will be processed again:
    1. Firstly, it attempts to find the `path_res` for `(root, b)`.
    2. It will iterate through the `single_imports` of `use b::c`, encounter `use c as b`, attempt to resolve `c` in `root`, and ultimately return `Err(Undetermined)`, thus passing the iterator.
    3. Use the binding `(root, b)` -> `root:🅰️:b` introduced by `use a::*` and ultimately return `root:🅰️:b` as the `path_res` of `b`.
    4. Then define the binding `(root, c)` -> `root:🅰️🅱️:c`.
3. Then process `use c as b`, update the resolution for `(root, b)` to refer to `root:🅰️🅱️:c`, ultimately causing inconsistency.

In my view, step `2.2` has an issue where it should exit early, similar to the behavior when there's no `imported_module`. Therefore, I've added an attribute called `indeterminate` to `ImportData`. This will help us handle only those single imports that have at least one determined binding.

r? ``@petrochenkov``
2024-06-05 18:21:11 +02:00
..
rustc Change SIGPIPE ui from #[unix_sigpipe = "..."] to -Zon-broken-pipe=... 2024-05-02 19:48:29 +02:00
rustc_abi don't inhibit random field reordering on repr(packed(1)) 2024-05-21 19:22:04 +02:00
rustc_arena
rustc_ast Rollup merge of #125635 - fmease:mv-type-binding-assoc-item-constraint, r=compiler-errors 2024-05-31 08:50:22 +02:00
rustc_ast_ir Remove extern crate rustc_macros from numerous crates. 2024-04-29 10:21:54 +10:00
rustc_ast_lowering Rollup merge of #125790 - WaffleLapkin:no-tail-recomputation-in-lower-stmts, r=lcnr 2024-05-31 08:50:24 +02:00
rustc_ast_passes Rollup merge of #125635 - fmease:mv-type-binding-assoc-item-constraint, r=compiler-errors 2024-05-31 08:50:22 +02:00
rustc_ast_pretty Rollup merge of #125635 - fmease:mv-type-binding-assoc-item-constraint, r=compiler-errors 2024-05-31 08:50:22 +02:00
rustc_attr Rename buffer_lint_with_diagnostic to buffer_lint 2024-05-21 20:16:39 +00:00
rustc_baked_icu_data
rustc_borrowck Rollup merge of #125667 - oli-obk:taintify, r=TaKO8Ki 2024-06-04 08:52:12 -04:00
rustc_builtin_macros Make top-level rustc_parse functions fallible. 2024-06-05 10:38:03 +10:00
rustc_codegen_cranelift Auto merge of #122597 - pacak:master, r=bjorn3 2024-06-04 00:05:56 +00:00
rustc_codegen_gcc Uplift TypeRelation and Relate 2024-06-01 12:50:58 -04:00
rustc_codegen_llvm Rollup merge of #125311 - calebzulawski:repr-packed-simd-intrinsics, r=workingjubilee 2024-06-02 05:06:47 -07:00
rustc_codegen_ssa Rollup merge of #125920 - bjorn3:allow_static_mut_linkage_def, r=Urgau 2024-06-05 01:14:32 -07:00
rustc_const_eval Opt-in diagnostics reporting to avoid doing extra work in the new solver 2024-06-03 09:27:52 -04:00
rustc_data_structures Apply x clippy --fix and x fmt 2024-05-30 09:51:27 +08:00
rustc_driver
rustc_driver_impl Make top-level rustc_parse functions fallible. 2024-06-05 10:38:03 +10:00
rustc_error_codes Rename HIR TypeBinding to AssocItemConstraint and related cleanup 2024-05-30 22:52:33 +02:00
rustc_error_messages Auto merge of #125410 - fmease:adj-lint-diag-api, r=nnethercote 2024-05-27 08:44:12 +00:00
rustc_errors Auto merge of #125410 - fmease:adj-lint-diag-api, r=nnethercote 2024-05-27 08:44:12 +00:00
rustc_expand Make top-level rustc_parse functions fallible. 2024-06-05 10:38:03 +10:00
rustc_feature Rollup merge of #124486 - beetrees:vectorcall-tracking-issue, r=ehuss 2024-06-04 08:25:46 +01:00
rustc_fluent_macro
rustc_fs_util Stabilize std::path::absolute 2024-04-24 14:35:02 +00:00
rustc_graphviz
rustc_hir Auto merge of #124662 - zetanumbers:needs_async_drop, r=oli-obk 2024-05-31 10:12:24 +00:00
rustc_hir_analysis Rollup merge of #125667 - oli-obk:taintify, r=TaKO8Ki 2024-06-04 08:52:12 -04:00
rustc_hir_pretty Rollup merge of #125635 - fmease:mv-type-binding-assoc-item-constraint, r=compiler-errors 2024-05-31 08:50:22 +02:00
rustc_hir_typeck Rollup merge of #125906 - compiler-errors:simplify-method-error-args, r=fmease 2024-06-05 01:14:32 -07:00
rustc_incremental Run rustfmt on files that need it. 2024-05-24 15:17:21 +10:00
rustc_index Simplify static_assert_sizes. 2024-04-18 15:36:25 +10:00
rustc_index_macros rustc_index: Add a ZERO constant to index types 2024-04-03 19:06:22 +03:00
rustc_infer Auto merge of #123536 - compiler-errors:simplify-int-float, r=lcnr 2024-06-04 17:07:13 +00:00
rustc_interface Make top-level rustc_parse functions fallible. 2024-06-05 10:38:03 +10:00
rustc_lexer Improved the compiler code with clippy 2024-04-24 09:41:44 +02:00
rustc_lint Rollup merge of #125596 - nnethercote:rental-hard-error, r=estebank 2024-06-04 21:41:33 +02:00
rustc_lint_defs Rollup merge of #125596 - nnethercote:rental-hard-error, r=estebank 2024-06-04 21:41:33 +02:00
rustc_llvm thinlto: only build summary file if needed 2024-05-23 14:58:30 -04:00
rustc_log remove tracing tree indent lines 2024-05-30 15:26:48 +02:00
rustc_macros Nits and formatting 2024-06-03 10:02:08 -04:00
rustc_metadata Auto merge of #124662 - zetanumbers:needs_async_drop, r=oli-obk 2024-05-31 10:12:24 +00:00
rustc_middle Rollup merge of #123168 - joshtriplett:size-of-prelude, r=Amanieu 2024-06-05 01:14:29 -07:00
rustc_mir_build Reduce pub exposure. 2024-06-04 16:55:55 +10:00
rustc_mir_dataflow Remove #[macro_use] extern crate tracing from rustc_mir_dataflow. 2024-05-23 18:02:40 +10:00
rustc_mir_transform Auto merge of #122597 - pacak:master, r=bjorn3 2024-06-04 00:05:56 +00:00
rustc_monomorphize Don't eagerly monomorphize drop for types that are impossible to instantiate 2024-05-24 21:53:39 -04:00
rustc_next_trait_solver Uplift binder 2024-05-21 17:00:45 -04:00
rustc_parse Make top-level rustc_parse functions fallible. 2024-06-05 10:38:03 +10:00
rustc_parse_format Apply x clippy --fix and x fmt 2024-05-30 09:51:27 +08:00
rustc_passes Closures are recursively reachable 2024-06-04 22:50:35 +02:00
rustc_pattern_analysis remove tracing tree indent lines 2024-05-30 15:26:48 +02:00
rustc_privacy Make body_owned_by return the body directly. 2024-05-29 10:04:08 +00:00
rustc_query_impl Remove extern crate rustc_middle from rustc_query_impl. 2024-05-13 08:20:18 +10:00
rustc_query_system Add a footer in FileEncoder and check for it in MemDecoder 2024-05-21 20:12:29 -04:00
rustc_resolve Rollup merge of #124840 - bvanjoi:fix-124490, r=petrochenkov 2024-06-05 18:21:11 +02:00
rustc_sanitizers check_is_object_safe -> is_object_safe 2024-06-03 09:49:30 -04:00
rustc_serialize Apply x clippy --fix and x fmt 2024-05-30 09:51:27 +08:00
rustc_session coverage: Add CLI support for -Zcoverage-options=condition 2024-05-30 15:38:46 +10:00
rustc_smir Split smir Const into TyConst and MirConst 2024-06-04 10:14:45 +01:00
rustc_span rustc_span: Inline some hot functions 2024-06-03 01:01:18 +03:00
rustc_symbol_mangling Rename Unsafe to Safety 2024-05-17 18:33:37 -03:00
rustc_target Rollup merge of #117671 - kjetilkjeka:nvptx_c_abi_avoid_direct, r=davidtwco 2024-05-28 18:04:31 +02:00
rustc_trait_selection Rollup merge of #125717 - weiznich:move/do_not_recommend_to_diganostic_namespace, r=compiler-errors 2024-06-04 08:52:12 -04:00
rustc_traits Align Term methods with GenericArg methods 2024-06-03 20:36:27 -04:00
rustc_transmute Align: add bytes_usize and bits_usize 2024-05-01 15:57:33 +02:00
rustc_ty_utils Downsize ty::Expr 2024-06-04 10:13:38 +01:00
rustc_type_ir Auto merge of #123536 - compiler-errors:simplify-int-float, r=lcnr 2024-06-04 17:07:13 +00:00
rustc_type_ir_macros Uplift TraitPredicate 2024-05-11 18:20:00 -04:00
stable_mir Split smir Const into TyConst and MirConst 2024-06-04 10:14:45 +01:00