@@ -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