Change:
I’m getting an ICE when compiling using
I was able to trace down the bug. It is due to me using a unicode character in the documentation of a function this somehow triggers the compiler bug. A minimal example is:
I believe Servo is also currently hitting this in the script crate during our current rust upgrade.
Yes, at least the failing assertion is the same. Removing non-ASCII characters from doc comments didn’t seem to help, though.
cc might this be another overflow error?
recommended on IRC to build with , but log output seems to be disabled in Nightly. So I built Rust with debugging enabled and tried again. (This took forever because of .) There was a lot of output, here is just the end of it:
This is lines / 299MB of output.
my current hypothesis is that this is the problem; it is at the very least very suspicious considering that five lines up in the previous statement we are normalizing the position to zero by subtracting the , not adding it.
(other good news: I have figured out how to make a regression test for this that will integrate into the rust test suite.)

Discussion:
.into_inner() .map_in_place(|mbc| codemap::MultiByteChar { <del> pos: mbc.pos + start_pos, </del> <ins> pos: mbc.pos - start_pos, </ins> bytes: mbc.bytes });

<ins> // Copyright 2015 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your // option. This file may not be copied, modified, or distributed // except according to those terms. #![crate_type="lib"] // This is a file that pulls in a separate file as a submodule, where // that separate file has many multi-byte characters, to try to // encourage the compiler to trip on them. mod issue24687_mbcs_in_comments; pub use issue24687_mbcs_in_comments::D; </ins>

<ins> // Copyright 2015 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your // option. This file may not be copied, modified, or distributed // except according to those terms. use std::fmt; // This ia file with many multi-byte characters, to try to encourage // the compiler to trip on them.  The Drop implementation below will // need to have its source location embedded into the debug info for // the output file. // αααααααααααααααααααααααααααααααααααααααααααααααααααααααααααααααααααααα // ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ // γγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγγ // δδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδδ // εεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεε // ζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζζ // ηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηηη // θθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθθ // ιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιιι // κκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκκ pub struct D<X:fmt::Debug>(pub X); impl<X:fmt::Debug> Drop for D<X> { fn drop(&mut self) { // λλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλ println!("Dropping D({:?})", self.0); } } </ins>

<ins> // Copyright 2015 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your // option. This file may not be copied, modified, or distributed // except according to those terms. // aux-build:issue24687_lib.rs extern crate issue24687_lib as d; fn main() { // Create a d, which has a destructor whose body will be trans'ed // into the generated code here, and thus the local debuginfo will // need references into the original source locations from // `importer` above. let _d = d::D("Hi"); } </ins>