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

unexpected panic with command line option --extern #107128

Closed
michelou opened this issue Jan 20, 2023 · 6 comments
Closed

unexpected panic with command line option --extern #107128

michelou opened this issue Jan 20, 2023 · 6 comments
Labels
A-diagnostics Area: Messages for errors, warnings, and lints I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Comments

@michelou
Copy link

Goal : Build imagetool example using only rustc.exe without Cargo.toml (we specify the external dependency image as rustc option).

Here is the compiler output :

> "%USERPROFILE%\.cargo\bin\rustc.exe" --version
rustc 1.66.1 (90743e729 2023-01-10)

> "%USERPROFILE%\.cargo\bin\rustc.exe" -g  --crate-name "imagetool" --crate-type bin --edition 2021 --out-dir "R:\mastering-rust\Chapter02\imgtool\target" --target "x86_64-pc-windows-msvc" -L crate --extern "image=%USERPROFILE%\.cargo\registry\cache\github.com-1ecc6299db9ec823\image-0.24.5.crate"  "R:\mastering-rust\Chapter02\imgtool\src\main.rs"
thread 'rustc' panicked at 'identifier: "metadata_crate_location_unknown_type", attr: None, args: FluentArgs([("path", String("%USERPROFILE%\\.cargo\\registry\\cache\\github.com-1ecc6299db9ec823\\image-0.24.5.crate"))]), errors: [ResolverError(Reference(Variable { id: "crate_name" }))]', compiler\rustc_errors\src\translation.rs:105:17
stack backtrace:
   0:     0x7ff935df9a62 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hc97dbc4fe64c9e1d
   1:     0x7ff935e356db - core::fmt::write::ha369a394538739aa
   2:     0x7ff935dec18a - <std::io::IoSlice as core::fmt::Debug>::fmt::h479b71bd3dadc1d1
   3:     0x7ff935df97ab - std::sys::common::alloc::realloc_fallback::h233ebec439b629e2
   4:     0x7ff935dfd109 - std::panicking::default_hook::h0ab9e14ad869b271
   5:     0x7ff935dfcd8a - std::panicking::default_hook::h0ab9e14ad869b271
   6:     0x7ff8cb0c1d6e - rustc_driver[e9de03b45d14c171]::describe_lints
   7:     0x7ff935dfda60 - std::panicking::rust_panic_with_hook::he7a40468954ae645
   8:     0x7ff935dfd7bd - <std::panicking::begin_panic_handler::StrPanicPayload as core::panic::BoxMeUp>::get::h44bc3105923add49
   9:     0x7ff935dfa76f - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hc97dbc4fe64c9e1d
  10:     0x7ff935dfd480 - rust_begin_unwind
  11:     0x7ff935e6b5f5 - core::panicking::panic_fmt::h1862038ee9bad685
  12:     0x7ff8c97b9f06 - rustc_errors[20be445f3eba0fb3]::emitter::is_case_difference
  13:     0x7ff8c97b1284 - <rustc_errors[20be445f3eba0fb3]::emitter::EmitterWriter>::ui_testing
  14:     0x7ff8c97abbdc - <rustc_errors[20be445f3eba0fb3]::emitter::EmitterWriter as rustc_errors[20be445f3eba0fb3]::emitter::Emitter>::emit_diagnostic
  15:     0x7ff8c97a4271 - <rustc_errors[20be445f3eba0fb3]::HandlerInner>::emit_diagnostic
  16:     0x7ff8c97a36d2 - <rustc_errors[20be445f3eba0fb3]::Handler>::emit_diagnostic
  17:     0x7ff8cd4935eb - <rustc_errors[20be445f3eba0fb3]::ErrorGuaranteed as rustc_errors[20be445f3eba0fb3]::diagnostic_builder::EmissionGuarantee>::diagnostic_builder_emit_producing_guarantee
  18:     0x7ff8ccf9e10a - <rustc_metadata[dac8933e4ad73025]::errors::CannotFindCrate as rustc_errors[20be445f3eba0fb3]::diagnostic_builder::IntoDiagnostic>::into_diagnostic
  19:     0x7ff8ccfb7e0b - <rustc_metadata[dac8933e4ad73025]::locator::MetadataError as core[a1be09f172195029]::fmt::Display>::fmt
  20:     0x7ff8c954c1af - <rustc_metadata[dac8933e4ad73025]::creader::CrateLoader>::into_cstore
  21:     0x7ff8c954e1c5 - <rustc_metadata[dac8933e4ad73025]::creader::CrateLoader>::process_path_extern
  22:     0x7ff8ca5c669e - <rustc_resolve[7c01eaad461df3a4]::Resolver>::expect_module
  23:     0x7ff8ca62397c - <<rustc_resolve[7c01eaad461df3a4]::late::LateResolutionVisitor>::find_lifetime_for_self::SelfVisitor as rustc_ast[6de64748d468de7f]::visit::Visitor>::visit_ty
  24:     0x7ff8ca62acae - <<rustc_resolve[7c01eaad461df3a4]::late::LateResolutionVisitor>::find_lifetime_for_self::SelfVisitor as rustc_ast[6de64748d468de7f]::visit::Visitor>::visit_ty
  25:     0x7ff8ca628a7e - <<rustc_resolve[7c01eaad461df3a4]::late::LateResolutionVisitor>::find_lifetime_for_self::SelfVisitor as rustc_ast[6de64748d468de7f]::visit::Visitor>::visit_ty
  26:     0x7ff8ca628b5d - <<rustc_resolve[7c01eaad461df3a4]::late::LateResolutionVisitor>::find_lifetime_for_self::SelfVisitor as rustc_ast[6de64748d468de7f]::visit::Visitor>::visit_ty
  27:     0x7ff8ca5f9264 - <rustc_resolve[7c01eaad461df3a4]::late::LateResolutionVisitor as rustc_ast[6de64748d468de7f]::visit::Visitor>::visit_local
  28:     0x7ff8ca5f8a1a - <rustc_resolve[7c01eaad461df3a4]::late::LateResolutionVisitor as rustc_ast[6de64748d468de7f]::visit::Visitor>::visit_block
  29:     0x7ff8ca601970 - <rustc_resolve[7c01eaad461df3a4]::late::LateResolutionVisitor as rustc_ast[6de64748d468de7f]::visit::Visitor>::visit_fn
  30:     0x7ff8ca651cf6 - <rustc_resolve[7c01eaad461df3a4]::build_reduced_graph::BuildReducedGraphVisitor as rustc_ast[6de64748d468de7f]::visit::Visitor>::visit_ty
  31:     0x7ff8ca611446 - <<rustc_resolve[7c01eaad461df3a4]::late::LateResolutionVisitor>::find_lifetime_for_self::SelfVisitor as rustc_ast[6de64748d468de7f]::visit::Visitor>::visit_ty
  32:     0x7ff8ca5f83dc - <rustc_resolve[7c01eaad461df3a4]::late::LateResolutionVisitor as rustc_ast[6de64748d468de7f]::visit::Visitor>::visit_item
  33:     0x7ff8c919f092 - <rustc_builtin_macros[cca7005986e3d0e7]::deriving::generic::find_type_parameters::Visitor as rustc_ast[6de64748d468de7f]::visit::Visitor>::visit_ty
  34:     0x7ff8c91b2447 - <rustc_resolve[7c01eaad461df3a4]::def_collector::DefCollector as rustc_ast[6de64748d468de7f]::visit::Visitor>::visit_param
  35:     0x7ff8c91a81d1 - <rustc_resolve[7c01eaad461df3a4]::Resolver>::resolve_crate
  36:     0x7ff8c8917b22 - <rustc_interface[10a7111f9310fd6d]::passes::LintStoreExpandImpl as rustc_expand[c56eb5aee4619b21]::base::LintStoreExpand>::pre_expansion_lint
  37:     0x7ff8c890940e - <rustc_interface[10a7111f9310fd6d]::queries::Queries>::expansion
  38:     0x7ff8c88dc477 - <rustc_middle[18c13081b174ae21]::ty::SymbolName as core[a1be09f172195029]::fmt::Display>::fmt
  39:     0x7ff8c88db6dd - rustc_driver[e9de03b45d14c171]::args::arg_expand_all
  40:     0x7ff8c88cc809 - <unknown>
  41:     0x7ff8c88c3990 - <unknown>
  42:     0x7ff935e0eabc - std::sys::windows::thread::Thread::new::haf1327b4da6a4ac1
  43:     0x7ff9988026bd - BaseThreadInitThunk
  44:     0x7ff9991adfb8 - RtlUserThreadStart

error: internal compiler error: unexpected panic

note: the compiler unexpectedly panicked. this is a bug.

note: we would appreciate a bug report: https://github.com/rust-lang/rust/issues/new?labels=C-bug%2C+I-ICE%2C+T-compiler&template=ice.md

note: rustc 1.66.1 (90743e729 2023-01-10) running on x86_64-pc-windows-msvc

note: compiler flags: --crate-type bin

query stack during panic:
end of query stack

PS. Rust source file src\main.rs is :

use std::env;
use std::path::Path;
use std::process;

fn main() {
    let arg = env::args().skip(1).next();
    if arg.is_none() {
        println!("Error: Missing argument specifying the image file");
        process::exit(1);
    }
    let image_path = arg.unwrap();
    let path = Path::new(&image_path);
    let img = image::open(path).unwrap();
    let rotated = img.rotate90();
    
    // do not modify the input file
    let out_path = Path::new("target").join(path.file_name().unwrap());
    rotated.save(out_path).unwrap();
}
@est31
Copy link
Member

est31 commented Jan 21, 2023

You are passing a .crate file to rustc, this won't work. .crate files are cargo-specific tar.gz archives of source code, while rust expects, for dependencies, pre-compiled binary libraries. You need to extract the image crate, compile it, then pass that to the example. In general, given that image has a non trivial dependencies of its own, this is a quite tedious task to do manually so you'd likely need some kind of automation.

There still seems to be a valid bug, where if you pass an invalid file as dependency, rustc is ICE'ing, which it shouldn't. Instead it should print an error.

@Noratrieb Noratrieb added A-diagnostics Area: Messages for errors, warnings, and lints I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Jan 21, 2023
@fmease
Copy link
Member

fmease commented Jan 21, 2023

This should be fixed in 1.67 (current beta) by #104621.

@michelou
Copy link
Author

@est31, @fmease 👍

@michelou
Copy link
Author

Looks good with 1.67 :

> "%USERPROFILE%\.cargo\bin\rustc.exe" -g  --crate-name "imagetool" --crate-type bin --edition 2021 --out-dir "R:\mastering-rust\Chapter02\imgtool\target" --target "x86_64-pc-windows-msvc" -L crate --extern "image=%USERPROFILE%\.cargo\registry\cache\github.com-1ecc6299db9ec823\image-0.24.5.crate"  "R:\mastering-rust\Chapter02\imgtool\src\main.rs"
error: extern location for image is of an unknown type: %USERPROFILE%\.cargo\registry\cache\github.com-1ecc6299db9ec823\image-0.24.5.crate

@fmease
Copy link
Member

fmease commented Jan 30, 2023

Great! So this can be closed then

@michelou
Copy link
Author

rustc is no more ICE'ing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-diagnostics Area: Messages for errors, warnings, and lints I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

No branches or pull requests

4 participants