@@ -660,15 +660,16 @@ pub(crate) fn create_global_ctxt<'tcx>(
660
660
661
661
let pre_configured_attrs = rustc_expand:: config:: pre_configure_attrs ( sess, & krate. attrs ) ;
662
662
663
- let crate_name = get_crate_name ( sess, & pre_configured_attrs) ;
663
+ let ( crate_name, crate_name_origin ) = get_crate_name ( sess, & pre_configured_attrs) ;
664
664
let crate_types = collect_crate_types ( sess, & pre_configured_attrs) ;
665
665
let stable_crate_id = StableCrateId :: new (
666
666
crate_name,
667
667
crate_types. contains ( & CrateType :: Executable ) ,
668
668
sess. opts . cg . metadata . clone ( ) ,
669
669
sess. cfg_version ,
670
670
) ;
671
- let outputs = util:: build_output_filenames ( & pre_configured_attrs, sess) ;
671
+ let outputs = util:: build_output_filenames ( sess, crate_name, crate_name_origin) ;
672
+
672
673
let dep_graph = setup_dep_graph ( sess, crate_name) ?;
673
674
674
675
let cstore =
@@ -1044,7 +1045,7 @@ pub(crate) fn start_codegen<'tcx>(
1044
1045
}
1045
1046
1046
1047
/// Compute and validate the crate name.
1047
- pub fn get_crate_name ( sess : & Session , krate_attrs : & [ ast:: Attribute ] ) -> Symbol {
1048
+ pub fn get_crate_name ( sess : & Session , krate_attrs : & [ ast:: Attribute ] ) -> ( Symbol , CrateNameOrigin ) {
1048
1049
// We unconditionally validate all `#![crate_name]`s even if a crate name was
1049
1050
// set on the command line via `--crate-name` which we prioritize over the
1050
1051
// crate attributes. We perform the validation here instead of later to ensure
@@ -1053,9 +1054,9 @@ pub fn get_crate_name(sess: &Session, krate_attrs: &[ast::Attribute]) -> Symbol
1053
1054
let attr_crate_name =
1054
1055
validate_and_find_value_str_builtin_attr ( sym:: crate_name, sess, krate_attrs) ;
1055
1056
1056
- let validate = |name, span| {
1057
+ let validate = |name, span, origin | {
1057
1058
rustc_session:: output:: validate_crate_name ( sess, name, span) ;
1058
- name
1059
+ ( name, origin )
1059
1060
} ;
1060
1061
1061
1062
if let Some ( crate_name) = & sess. opts . crate_name {
@@ -1069,11 +1070,11 @@ pub fn get_crate_name(sess: &Session, krate_attrs: &[ast::Attribute]) -> Symbol
1069
1070
attr_crate_name,
1070
1071
} ) ;
1071
1072
}
1072
- return validate ( crate_name, None ) ;
1073
+ return validate ( crate_name, None , CrateNameOrigin :: CliOpt ) ;
1073
1074
}
1074
1075
1075
1076
if let Some ( ( crate_name, span) ) = attr_crate_name {
1076
- return validate ( crate_name, Some ( span) ) ;
1077
+ return validate ( crate_name, Some ( span) , CrateNameOrigin :: CrateAttr ) ;
1077
1078
}
1078
1079
1079
1080
if let Input :: File ( ref path) = sess. io . input
@@ -1082,11 +1083,19 @@ pub fn get_crate_name(sess: &Session, krate_attrs: &[ast::Attribute]) -> Symbol
1082
1083
if file_stem. starts_with ( '-' ) {
1083
1084
sess. dcx ( ) . emit_err ( errors:: CrateNameInvalid { crate_name : file_stem } ) ;
1084
1085
} else {
1085
- return validate ( Symbol :: intern ( & file_stem. replace ( '-' , "_" ) ) , None ) ;
1086
+ let crate_name = file_stem. replace ( '-' , "_" ) ;
1087
+ return validate ( Symbol :: intern ( & crate_name) , None , CrateNameOrigin :: InputFile ) ;
1086
1088
}
1087
1089
}
1088
1090
1089
- Symbol :: intern ( "rust_out" )
1091
+ ( Symbol :: intern ( "rust_out" ) , CrateNameOrigin :: Fallback )
1092
+ }
1093
+
1094
+ pub enum CrateNameOrigin {
1095
+ CliOpt ,
1096
+ CrateAttr ,
1097
+ InputFile ,
1098
+ Fallback ,
1090
1099
}
1091
1100
1092
1101
fn get_recursion_limit ( krate_attrs : & [ ast:: Attribute ] , sess : & Session ) -> Limit {
0 commit comments