-
Notifications
You must be signed in to change notification settings - Fork 13.7k
Open
Labels
A-diagnosticsArea: Messages for errors, warnings, and lintsArea: Messages for errors, warnings, and lintsA-resolveArea: Name/path resolution done by `rustc_resolve` specificallyArea: Name/path resolution done by `rustc_resolve` specificallyI-compiletimeIssue: Problems and improvements with respect to compile times.Issue: Problems and improvements with respect to compile times.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.
Description
enum A<A> {
A(A),
A { C: A },
}
// Make sure that we aren't using `self::` in paths, since it doesn't work in
// non-module scopes.
const A: () = {
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Hash)]
struct A<A: A>(B)
where
A: A<
{
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Default, Hash)]
struct A<A> {
A: A,
}
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Hash)]
struct A<
A: A<
{
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Hash)]
struct A<A: A>(B)
where
A: A<
{
#[derive(
Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Hash,
)]
struct A<
A: A<
{
#[derive(
Copy,
Clone,
PartialEq,
Eq,
PartialOrd,
Ord,
Debug,
Hash,
)]
struct A<A: A>(B)
where
A: A<{ continue }>;
},
>,
>(B)
where
A: A<{ continue }>;
},
>;
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Hash)]
enum A<A> {
A(),
A { A: A },
}
},
>,
>(B)
where
A: A<{ continue }>;
},
>;
};
time: 0.001; rss: 45MB -> 49MB ( +4MB) parse_crate
time: 0.000; rss: 49MB -> 53MB ( +4MB) setup_global_ctxt
error[E0428]: the name `A` is defined multiple times
--> 894ADFAEF56FD5BE3968F44425D02AB0BFB037BD9F3CC014F7CF27D10A73C642.rs:5:5
|
4 | A(A),
| ---- previous definition of the type `A` here
5 | A { C: A },
| ^ `A` redefined here
|
= note: `A` must be defined only once in the type namespace of this enum
error[E0428]: the name `A` is defined multiple times
--> 894ADFAEF56FD5BE3968F44425D02AB0BFB037BD9F3CC014F7CF27D10A73C642.rs:22:17
|
17 | struct A<A> {
| ----------- previous definition of the type `A` here
...
22 | / struct A<
23 | | A: A<
24 | | {
25 | | #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Hash)]
... |
65 | | where
66 | | A: A<{ continue }>;
| |_______________________________________^ `A` redefined here
|
= note: `A` must be defined only once in the type namespace of this block
error[E0428]: the name `A` is defined multiple times
--> 894ADFAEF56FD5BE3968F44425D02AB0BFB037BD9F3CC014F7CF27D10A73C642.rs:58:29
|
26 | / ... struct A<A: A>(B)
27 | | ... where
28 | | ... A: A<
29 | | ... {
... |
54 | | ... },
55 | | ... >;
| |____________________________- previous definition of the type `A` here
...
58 | ... enum A<A> {
| ^^^^^^^^^ `A` redefined here
|
= note: `A` must be defined only once in the type namespace of this block
error[E0428]: the name `A` is defined multiple times
--> 894ADFAEF56FD5BE3968F44425D02AB0BFB037BD9F3CC014F7CF27D10A73C642.rs:60:33
|
59 | ... A(),
| --- previous definition of the type `A` here
60 | ... A { A: A },
| ^ `A` redefined here
|
= note: `A` must be defined only once in the type namespace of this enum
time: 8.261; rss: 53MB -> 1032MB ( +978MB) expand_crate
time: 8.261; rss: 53MB -> 1032MB ( +978MB) macro_expand_crate
time: 1.143; rss: 1032MB -> 1028MB ( -4MB) AST_validation
time: 0.010; rss: 1028MB -> 1028MB ( +0MB) check_reexport_ambiguities
time: 0.585; rss: 1028MB -> 1038MB ( +10MB) finalize_macro_resolutions
This probably generates massive amount of code hence the 50mb -> 1gb blowup.
After these lines, it looks like rustc hangs while it spends a lot of time (I killed it after 10 minutes of waiting) inside
29,39% librustc_driver-e9ace2a97781a33e.so [.] <rustc_resolve::Resolver>::add_module_candidates::<&<rustc_resolve::late::LateResolutionVisitor>::suggest_typo::{closure#0}>
27,42% librustc_driver-e9ace2a97781a33e.so [.] <rustc_resolve::Resolver>::add_module_candidates::<&<rustc_resolve::late::LateResolutionVisitor>::try_lookup_name_relaxed::{closure#0}>
13,17% librustc_driver-e9ace2a97781a33e.so [.] <rustc_resolve::Resolver>::lookup_import_candidates_from_module::<&&<rustc_resolve::late::LateResolutionVisitor>::try_lookup_name_relaxed::{closure#0}>
1,27% librustc_driver-e9ace2a97781a33e.so [.] <rustc_resolve::ModuleData>::nearest_parent_mod
1,09% librustc_driver-e9ace2a97781a33e.so [.] <rustc_resolve::Resolver>::lookup_import_candidates_from_module::<&&<rustc_resolve::late::LateResolutionVisitor>::try_lookup_name_relaxed::{closure#1}>
Noratrieb, fee1-dead, jyn514, lqd, cjgillot and 9 moreMolotovCherry, zirconium-n and benluelo
Metadata
Metadata
Assignees
Labels
A-diagnosticsArea: Messages for errors, warnings, and lintsArea: Messages for errors, warnings, and lintsA-resolveArea: Name/path resolution done by `rustc_resolve` specificallyArea: Name/path resolution done by `rustc_resolve` specificallyI-compiletimeIssue: Problems and improvements with respect to compile times.Issue: Problems and improvements with respect to compile times.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.