1
Fork 0

Use an error struct instead of a panic

This commit is contained in:
Alice Ryhl 2024-05-15 10:01:55 +02:00
parent 518becf5ea
commit b780fa9219
10 changed files with 47 additions and 5 deletions

View file

@ -18,6 +18,8 @@ codegen_llvm_error_creating_import_library =
codegen_llvm_error_writing_def_file =
Error writing .DEF file: {$error}
codegen_llvm_fixed_x18_invalid_arch = the `-Zfixed-x18` flag is not supported on the `{$arch}` architecture
codegen_llvm_from_llvm_diag = {$message}
codegen_llvm_from_llvm_optimization_diag = {$filename}:{$line}:{$column} {$pass_name} ({$kind}): {$message}

View file

@ -254,3 +254,9 @@ pub struct MismatchedDataLayout<'a> {
pub(crate) struct InvalidTargetFeaturePrefix<'a> {
pub feature: &'a str,
}
#[derive(Diagnostic)]
#[diag(codegen_llvm_fixed_x18_invalid_arch)]
pub(crate) struct FixedX18InvalidArch<'a> {
pub arch: &'a str,
}

View file

@ -1,6 +1,6 @@
use crate::back::write::create_informational_target_machine;
use crate::errors::{
InvalidTargetFeaturePrefix, PossibleFeature, TargetFeatureDisableOrEnable,
FixedX18InvalidArch, InvalidTargetFeaturePrefix, PossibleFeature, TargetFeatureDisableOrEnable,
UnknownCTargetFeature, UnknownCTargetFeaturePrefix, UnstableCTargetFeature,
};
use crate::llvm;
@ -618,11 +618,10 @@ pub(crate) fn global_llvm_features(sess: &Session, diagnostics: bool) -> Vec<Str
// -Zfixed-x18
if sess.opts.unstable_opts.fixed_x18 {
if sess.target.arch != "aarch64" {
// TODO: What's the correct way to return a error here?
panic!("-Zfixed-x18 only allowed on aarch64");
sess.dcx().emit_fatal(FixedX18InvalidArch { arch: &sess.target.arch });
} else {
features.push("+reserve-x18".into());
}
features.push("+reserve-x18".into());
}
if diagnostics && let Some(f) = check_tied_features(sess, &featsmap) {