Skip to content
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

Static recursion checker doesn't like foreign items #18164

Closed
bgamari opened this issue Oct 19, 2014 · 1 comment
Closed

Static recursion checker doesn't like foreign items #18164

bgamari opened this issue Oct 19, 2014 · 1 comment
Labels
I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️

Comments

@bgamari
Copy link
Contributor

bgamari commented Oct 19, 2014

Given this example,

struct I2CReg {
  test: u32
}

extern {
  #[link_name="k20_iomem_I2C0"] pub static I2C0: I2CReg;
}

struct I2C {
  reg: &'static I2CReg
}

static mut i2c0: I2C = I2C {
  reg: &I2C0
};

The compiler fails with,

$ RUST_BACKTRACE=1 rustc ~/hi.rs
error: main function not found
error: internal compiler error: unexpected failure
note: the compiler hit an unexpected failure path. this is a bug.
note: we would appreciate a bug report: http://doc.rust-lang.org/complement-bugreport.html
note: run with `RUST_BACKTRACE=1` for a backtrace
task 'rustc' failed at 'expected item, found foreign item I2C0::I2C0 (id=10)', /opt/exp/rust/src/libsyntax/ast_map/mod.rs:327

stack backtrace:
   1:     0x7f8177084ac0 - rt::backtrace::imp::write::h1ca5678a3ff3db86FKq
   2:     0x7f8177087bf0 - failure::on_fail::h5e5f8014b5357c8925q
   3:     0x7f817784c120 - unwind::begin_unwind_inner::h8d456ef7c87c11498yd
   4:     0x7f817784bc60 - unwind::begin_unwind_fmt::hca0e3d62c3383802Awd
   5:     0x7f81735515a0 - ast_map::Map<'ast>::expect_item::h334acf2fbc39b3c5ZyA
   6:     0x7f8177fcc880 - middle::check_static_recursion::CheckItemRecursionVisitor<'a, 'ast>.Visitor<'v>::visit_expr::he096ace2658f1b8bbBm
   7:     0x7f8177fcc880 - middle::check_static_recursion::CheckItemRecursionVisitor<'a, 'ast>.Visitor<'v>::visit_expr::he096ace2658f1b8bbBm
   8:     0x7f8177fcb690 - middle::check_static_recursion::CheckItemRecursionVisitor<'a, 'ast>.Visitor<'v>::visit_item::hed53c23550405e1ahAm
   9:     0x7f8177fcb2c0 - middle::check_static_recursion::check_item_recursion::h5327b315a0b31aa3yzm
  10:     0x7f8177fc96a0 - middle::check_static_recursion::check_item::hd99fb3896a763d44hym
  11:     0x7f8177fca090 - middle::check_static_recursion::check_crate::hd6acd800f78889b5Axm
  12:     0x7f8177da3360 - util::common::time::h12472689958318282120
  13:     0x7f8178653240 - driver::driver::phase_3_run_analysis_passes::hce054544bc712d7cY9z
  14:     0x7f817864e380 - driver::driver::compile_input::h63529e8fd125edb4KQz
  15:     0x7f81786d9770 - driver::run_compiler::h7dbfcf2997d50ba64DD
  16:     0x7f81786d9620 - driver::run::closure.145928
  17:     0x7f8177dbd1f0 - task::TaskBuilder<S>::try_future::closure.103305
  18:     0x7f8177dbcfd0 - task::TaskBuilder<S>::spawn_internal::closure.103276
  19:     0x7f8178f3d040 - task::spawn_opts::closure.8464
  20:     0x7f81779fdf40 - rust_try_inner
  21:     0x7f81779fdf30 - rust_try
  22:     0x7f81778499e0 - unwind::try::heab2ced16db50a7aQnd
  23:     0x7f8177849860 - task::Task::run::h1f2a16a1fd2bfec6uDc
  24:     0x7f8178f3cd80 - task::spawn_opts::closure.8404
  25:     0x7f817784b130 - thread::thread_start::hfee97593d1ff979fFXc
  26:     0x7f8176b4b0c0 - start_thread
  27:     0x7f8177513f89 - __clone
  28:                0x0 - <unknown>
@steveklabnik steveklabnik added the I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ label Jan 27, 2015
@tamird
Copy link
Contributor

tamird commented Apr 22, 2015

No longer ICEs.

struct I2CReg {
  test: u32
}

extern {
  #[link_name="k20_iomem_I2C0"] pub static I2C0: I2CReg;
}

struct I2C {
  reg: &'static I2CReg
}

static mut i2c0: I2C = I2C {
  reg: &I2C0
};

fn main() {
    // Add code here
}
$ rustc main.rs
main.rs:6:50: 6:56 error: private type in exported type signature
main.rs:6   #[link_name="k20_iomem_I2C0"] pub static I2C0: I2CReg;

Fixing that makes it compile without error:

pub struct I2CReg {
  test: u32
}

extern {
  #[link_name="k20_iomem_I2C0"] pub static I2C0: I2CReg;
}

struct I2C {
  reg: &'static I2CReg
}

static mut i2c0: I2C = I2C {
  reg: &I2C0
};

fn main() {
    // Add code here
}

lnicola pushed a commit to lnicola/rust that referenced this issue Sep 25, 2024
fix: Temporary fix for `remove_unused_imports` not handling import aliases correctly

Fixes rust-lang#18129
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️
Projects
None yet
Development

No branches or pull requests

3 participants