@@ -6,6 +6,7 @@ use std::sync::{Arc, LazyLock};
6
6
use std:: { env, fs, iter} ;
7
7
8
8
use rustc_ast as ast;
9
+ use rustc_attr_parsing:: { AttributeKind , AttributeParser } ;
9
10
use rustc_codegen_ssa:: traits:: CodegenBackend ;
10
11
use rustc_data_structures:: parallel;
11
12
use rustc_data_structures:: steal:: Steal ;
@@ -32,7 +33,7 @@ use rustc_session::output::{collect_crate_types, filename_for_input};
32
33
use rustc_session:: search_paths:: PathKind ;
33
34
use rustc_session:: { Limit , Session } ;
34
35
use rustc_span:: {
35
- ErrorGuaranteed , FileName , SourceFileHash , SourceFileHashAlgorithm , Span , Symbol , sym,
36
+ DUMMY_SP , ErrorGuaranteed , FileName , SourceFileHash , SourceFileHashAlgorithm , Span , Symbol , sym,
36
37
} ;
37
38
use rustc_target:: spec:: PanicStrategy ;
38
39
use rustc_trait_selection:: traits;
@@ -1119,6 +1120,20 @@ pub(crate) fn start_codegen<'tcx>(
1119
1120
codegen
1120
1121
}
1121
1122
1123
+ pub ( crate ) fn parse_crate_name (
1124
+ sess : & Session ,
1125
+ attrs : & [ ast:: Attribute ] ,
1126
+ limit_diagnostics : bool ,
1127
+ ) -> Option < ( Symbol , Span ) > {
1128
+ let rustc_hir:: Attribute :: Parsed ( AttributeKind :: CrateName { name, name_span, .. } ) =
1129
+ AttributeParser :: parse_limited ( sess, & attrs, sym:: crate_name, DUMMY_SP , limit_diagnostics) ?
1130
+ else {
1131
+ unreachable ! ( "crate_name is the only attr we could've parsed here" ) ;
1132
+ } ;
1133
+
1134
+ Some ( ( name, name_span) )
1135
+ }
1136
+
1122
1137
/// Compute and validate the crate name.
1123
1138
pub fn get_crate_name ( sess : & Session , krate_attrs : & [ ast:: Attribute ] ) -> Symbol {
1124
1139
// We validate *all* occurrences of `#![crate_name]`, pick the first find and
@@ -1128,8 +1143,7 @@ pub fn get_crate_name(sess: &Session, krate_attrs: &[ast::Attribute]) -> Symbol
1128
1143
// in all code paths that require the crate name very early on, namely before
1129
1144
// macro expansion.
1130
1145
1131
- let attr_crate_name =
1132
- validate_and_find_value_str_builtin_attr ( sym:: crate_name, sess, krate_attrs) ;
1146
+ let attr_crate_name = parse_crate_name ( sess, krate_attrs, false ) ;
1133
1147
1134
1148
let validate = |name, span| {
1135
1149
rustc_session:: output:: validate_crate_name ( sess, name, span) ;
0 commit comments