Skip to content

Commit 56f7101

Browse files
committed
rustc: Default #[crate_name] on input, not output
1 parent 15b680a commit 56f7101

File tree

7 files changed

+29
-33
lines changed

7 files changed

+29
-33
lines changed

src/librustc/back/link.rs

+13-8
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
use back::archive::{Archive, METADATA_FILENAME};
1212
use back::rpath;
1313
use back::svh::Svh;
14-
use driver::driver::{CrateTranslation, OutputFilenames};
14+
use driver::driver::{CrateTranslation, OutputFilenames, Input, FileInput};
1515
use driver::config::NoDebugInfo;
1616
use driver::session::Session;
1717
use driver::config;
@@ -545,10 +545,9 @@ pub mod write {
545545
* system linkers understand.
546546
*/
547547

548-
// FIXME (#9639): This needs to handle non-utf8 `out_filestem` values
549548
pub fn find_crate_name(sess: Option<&Session>,
550549
attrs: &[ast::Attribute],
551-
out_filestem: &str) -> String {
550+
input: &Input) -> String {
552551
use syntax::crateid::CrateId;
553552

554553
let validate = |s: String, span: Option<Span>| {
@@ -591,11 +590,17 @@ pub fn find_crate_name(sess: Option<&Session>,
591590
}
592591
None => {}
593592
}
594-
return validate(from_str(out_filestem).unwrap_or_else(|| {
595-
let mut s = out_filestem.chars().filter(|c| c.is_XID_continue());
596-
from_str(s.collect::<String>().as_slice())
597-
.or(from_str("rust-out")).unwrap()
598-
}), None)
593+
match *input {
594+
FileInput(ref path) => {
595+
match path.filestem_str() {
596+
Some(s) => return validate(s.to_string(), None),
597+
None => {}
598+
}
599+
}
600+
_ => {}
601+
}
602+
603+
"rust-out".to_string()
599604
}
600605

601606
pub fn build_link_meta(sess: &Session, krate: &ast::Crate,

src/librustc/driver/driver.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ pub fn compile_input(sess: Session,
7777
krate.attrs.as_slice(),
7878
&sess);
7979
let id = link::find_crate_name(Some(&sess), krate.attrs.as_slice(),
80-
outputs.out_filestem.as_slice());
80+
input);
8181
let (expanded_crate, ast_map)
8282
= match phase_2_configure_and_expand(&sess, krate, id.as_slice()) {
8383
None => return,
@@ -652,8 +652,7 @@ pub fn pretty_print_input(sess: Session,
652652
ppm: PpMode,
653653
ofile: Option<Path>) {
654654
let krate = phase_1_parse_input(&sess, cfg, input);
655-
let id = link::find_crate_name(Some(&sess), krate.attrs.as_slice(),
656-
input.filestem().as_slice());
655+
let id = link::find_crate_name(Some(&sess), krate.attrs.as_slice(), input);
657656

658657
let (krate, ast_map, is_expanded) = match ppm {
659658
PpmExpanded | PpmExpandedIdentified | PpmTyped | PpmFlowGraph(_) => {

src/librustc/driver/mod.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -303,8 +303,7 @@ fn print_crate_info(sess: &Session,
303303
ofile,
304304
attrs.as_slice(),
305305
sess);
306-
let id = link::find_crate_name(Some(sess), attrs.as_slice(),
307-
t_outputs.out_filestem.as_slice());
306+
let id = link::find_crate_name(Some(sess), attrs.as_slice(), input);
308307

309308
if crate_name {
310309
println!("{}", id);

src/librustdoc/clean/mod.rs

+1-8
Original file line numberDiff line numberDiff line change
@@ -119,14 +119,7 @@ impl<'a> Clean<Crate> for visit_ast::RustdocVisitor<'a> {
119119

120120
// Figure out the name of this crate
121121
let input = driver::FileInput(cx.src.clone());
122-
let t_outputs = driver::build_output_filenames(&input,
123-
&None,
124-
&None,
125-
self.attrs.as_slice(),
126-
cx.sess());
127-
let name = link::find_crate_name(None,
128-
self.attrs.as_slice(),
129-
t_outputs.out_filestem.as_slice());
122+
let name = link::find_crate_name(None, self.attrs.as_slice(), &input);
130123

131124
// Clean the crate, translating the entire libsyntax AST to one that is
132125
// understood by rustdoc.

src/librustdoc/core.rs

+2-5
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,7 @@ fn get_ast_and_resolve(cpath: &Path, libs: HashSet<Path>, cfgs: Vec<String>)
8484
use rustc::driver::driver::{FileInput,
8585
phase_1_parse_input,
8686
phase_2_configure_and_expand,
87-
phase_3_run_analysis_passes,
88-
build_output_filenames};
87+
phase_3_run_analysis_passes};
8988
use rustc::driver::config::build_configuration;
9089

9190
let input = FileInput(cpath.clone());
@@ -118,10 +117,8 @@ fn get_ast_and_resolve(cpath: &Path, libs: HashSet<Path>, cfgs: Vec<String>)
118117

119118
let krate = phase_1_parse_input(&sess, cfg, &input);
120119

121-
let t_outputs = build_output_filenames(&input, &None, &None,
122-
krate.attrs.as_slice(), &sess);
123120
let name = link::find_crate_name(Some(&sess), krate.attrs.as_slice(),
124-
t_outputs.out_filestem.as_slice());
121+
&input);
125122

126123
let (krate, ast_map)
127124
= phase_2_configure_and_expand(&sess, krate, name.as_slice())

src/test/compile-fail/bad-crate-id2.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11-
extern crate bar = "#a"; //~ ERROR: invalid character in crate name: `#`
11+
extern crate bar = "#a"; //~ ERROR: invalid character `#` in crate name: `#a`
1212

1313
fn main() {}
1414

Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
-include ../tools.mk
22

33
all:
4-
$(RUSTC) foo.rs -o $(TMPDIR)/.foo 2>&1 \
5-
| grep "invalid character in crate name:"
6-
$(RUSTC) foo.rs -o $(TMPDIR)/.foo.bar 2>&1 \
7-
| grep "invalid character in crate name:"
8-
$(RUSTC) foo.rs -o $(TMPDIR)/+foo+bar 2>&1 \
9-
| grep "invalid character in crate name:"
4+
cp foo.rs $(TMPDIR)/.foo.rs
5+
$(RUSTC) $(TMPDIR)/.foo.rs 2>&1 \
6+
| grep "invalid character.*in crate name:"
7+
cp foo.rs $(TMPDIR)/.foo.bar
8+
$(RUSTC) $(TMPDIR)/.foo.bar 2>&1 \
9+
| grep "invalid character.*in crate name:"
10+
cp foo.rs $(TMPDIR)/+foo+bar
11+
$(RUSTC) $(TMPDIR)/+foo+bar 2>&1 \
12+
| grep "invalid character.*in crate name:"

0 commit comments

Comments
 (0)