@@ -660,15 +660,16 @@ pub(crate) fn create_global_ctxt<'tcx>(
660660
661661 let pre_configured_attrs = rustc_expand:: config:: pre_configure_attrs ( sess, & krate. attrs ) ;
662662
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) ;
664664 let crate_types = collect_crate_types ( sess, & pre_configured_attrs) ;
665665 let stable_crate_id = StableCrateId :: new (
666666 crate_name,
667667 crate_types. contains ( & CrateType :: Executable ) ,
668668 sess. opts . cg . metadata . clone ( ) ,
669669 sess. cfg_version ,
670670 ) ;
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+
672673 let dep_graph = setup_dep_graph ( sess, crate_name) ?;
673674
674675 let cstore =
@@ -1044,7 +1045,7 @@ pub(crate) fn start_codegen<'tcx>(
10441045}
10451046
10461047/// 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 ) {
10481049 // We unconditionally validate all `#![crate_name]`s even if a crate name was
10491050 // set on the command line via `--crate-name` which we prioritize over the
10501051 // 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
10531054 let attr_crate_name =
10541055 validate_and_find_value_str_builtin_attr ( sym:: crate_name, sess, krate_attrs) ;
10551056
1056- let validate = |name, span| {
1057+ let validate = |name, span, origin | {
10571058 rustc_session:: output:: validate_crate_name ( sess, name, span) ;
1058- name
1059+ ( name, origin )
10591060 } ;
10601061
10611062 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
10691070 attr_crate_name,
10701071 } ) ;
10711072 }
1072- return validate ( crate_name, None ) ;
1073+ return validate ( crate_name, None , CrateNameOrigin :: CliOpt ) ;
10731074 }
10741075
10751076 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 ) ;
10771078 }
10781079
10791080 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
10821083 if file_stem. starts_with ( '-' ) {
10831084 sess. dcx ( ) . emit_err ( errors:: CrateNameInvalid { crate_name : file_stem } ) ;
10841085 } 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 ) ;
10861088 }
10871089 }
10881090
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 ,
10901099}
10911100
10921101fn get_recursion_limit ( krate_attrs : & [ ast:: Attribute ] , sess : & Session ) -> Limit {
0 commit comments