Skip to content

Compiler infinite loop with memory allocation #38585

Closed
@novacrazy

Description

@novacrazy

EDIT:

This issue is with recursively imported modules like this:

pub mod myMod {
    pub use super::*;
}

where if crate A defines a module like that, attempting to use it in crate B will cause rustc and rustdoc to choke.


I'm sorry I can't provide any compiler output for this, because it technically did not crash, but I did get the thread stack using Process Explorer.

Here is the process info when I decided to kill the process:
perf

And here is the stack trace where it seems to copy new memory:
stack

rustc_resolve seems to crop up often as I refreshed the stack view.

I can't reproduce this with a short piece of code, because the resolution stuff is tied into the project, but I can show you exactly what happened in my code to produce this effect.

Basically, I'm writing an OpenAL wrapper, and attempting to refer to GLuint rather than ALuint causes the bug.

For example:

unsafe fn run() -> ALResult<()> {
    let sample_rate: GLuint = 44_100;
    let freq: GLuint = 600;
}

fn main() {
    unsafe {
        run().unwrap();
    }
}

should give an error that GLuint is not found, because it was a typo on my part, but instead it seems to soft-fail exhaustively resolving GLuint

If I correct my typo to ALuint, it compiles instantly with minimal memory usage.

Meta

Version:

rustc 1.15.0-nightly (71c06a56a 2016-12-18)
binary: rustc
commit-hash: 71c06a56a120a0d5e3b224105ee3e6754f83e5fa
commit-date: 2016-12-18
host: x86_64-pc-windows-msvc
release: 1.15.0-nightly
LLVM version: 3.9

Metadata

Metadata

Assignees

Labels

A-resolveArea: Name/path resolution done by `rustc_resolve` specificallyT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.regression-from-stable-to-stablePerformance or correctness regression from one stable version to another.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions