-
Notifications
You must be signed in to change notification settings - Fork 12.9k
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
Compiler Panic (capacity overflow from CodeMap::span_to_lines ) #24954
Comments
@gsquire if you cannot reduce it down to a standalone set of files, it might be easier for us if you share a cargo repo and commit id, rather than us having to guess what version of the external crates we need to attempt to reproduce. |
@pnkfelix Would you like me to post my Cargo.toml file? Would that be sufficient? |
@gsquire yeah that would be great |
@pnkfelix Here it is:
Sorry I didn't think to add that in the first place. If there is anything else you need, let me know. |
(okay I've replicated locally now) |
There a number of recent issues that report the bug here. See e.g. rust-lang#24761 and rust-lang#24954. This change does *not* fix them; it just makes the assert more immediate (and also injects a more conservative check, in that we are also checking that the files match up). So, this does not directly fix any bugs, and is expected ot actually inject new ICE's. But those will all represent latent bugs that need fixing.
Make `span_to_lines` to return a `Result`. (This is better than just asserting internally, since it allows caller to decide if they can recover from the problem.) Added type alias for `FileLinesResult` returned by `span_to_lines`. Update embedded unit test to reflect `span_to_lines` signature change. In diagnostic, catch `Err` from `span_to_lines` and print `"(unprintable span)"` instead. ---- There a number of recent issues that report the bug here. See e.g. rust-lang#24761 and rust-lang#24954. This change *might* fix them. However, that is not its main goal. The main goals are: 1. Make it possible for callers to recover from an error here, and 2. Insert a more conservative check, in that we are also checking that the files match up.
I hit this bug (probably). I made a reduced test case: macro_rules! foo {
($y:expr) => ({
$y = 2;
})
}
fn main() {
let x = 1;
foo!(x);
}
|
Make `span_to_lines` to return a `Result`. (This is better than just asserting internally, since it allows caller to decide if they can recover from the problem.) Added type alias for `FileLinesResult` returned by `span_to_lines`. Update embedded unit test to reflect `span_to_lines` signature change. In diagnostic, catch `Err` from `span_to_lines` and print `"(internal compiler error: unprintable span)"` instead. ---- There a number of recent issues that report the bug here. See e.g. rust-lang#24761 and rust-lang#24954. This change *might* fix them. However, that is not its main goal. The main goals are: 1. Make it possible for callers to recover from an error here, and 2. Insert a more conservative check, in that we are also checking that the files match up.
Make `span_to_lines` to return a `Result`. (This is better than just asserting internally, since it allows caller to decide if they can recover from the problem.) Added type alias for `FileLinesResult` returned by `span_to_lines`. Update embedded unit test to reflect `span_to_lines` signature change. In diagnostic, catch `Err` from `span_to_lines` and print `"(internal compiler error: unprintable span)"` instead. ---- There a number of recent issues that report the bug here. See e.g. rust-lang#24761 and rust-lang#24954. This change *might* fix them. However, that is not its main goal. The main goals are: 1. Make it possible for callers to recover from an error here, and 2. Insert a more conservative check, in that we are also checking that the files match up.
Guard against overflow in `codemap::span_to_lines`. (Revised/expanded version of PR #24976) Make `span_to_lines` to return a `Result`. In `diagnostic`, catch `Err` from `span_to_lines` and print `"(unprintable span)"` instead. ---- There a number of recent issues that report the bug here. See e.g. #24761 and #24954. This change *might* fix them. However, that is *not* its main goal. The main goals are: 1. Make it possible for callers to recover from an error here, and 2. Insert a more conservative check, in that we are also checking that the files match up. ---- As a drive-by, fix #24997 , which was causing my attempts to `make check-stage1` on an `--enable-debug` build to fail.
Guard against overflow in `codemap::span_to_lines`. (Revised/expanded version of PR #24976) Make `span_to_lines` to return a `Result`. In `diagnostic`, catch `Err` from `span_to_lines` and print `"(unprintable span)"` instead. ---- There a number of recent issues that report the bug here. See e.g. #24761 and #24954. This change *might* fix them. However, that is *not* its main goal. The main goals are: 1. Make it possible for callers to recover from an error here, and 2. Insert a more conservative check, in that we are also checking that the files match up. ---- As a drive-by, fix #24997 , which was causing my attempts to `make check-stage1` on an `--enable-debug` build to fail.
I had to change the code slightly to get it to compile, making the variable mutable. It compiled without ICE with the following code. macro_rules! foo {
($y:expr) => ({
$y = 2;
})
}
fn main() {
let mut x = 1;
foo!(x);
} |
Reference rust-lang/rust#24954
Code:
I got an unexpected compiler panic today when trying to compile this gist.
Back trace:
I realize the code does not build on my end, but the compiler panicked and output this with
RUST_BACKTRACE=1
.Meta
rustc --version --verbose
:The text was updated successfully, but these errors were encountered: