1
Fork 0

Consolidate codegen-related compiler flags

Move them all behind a new -C switch. This migrates some -Z flags and some
top-level flags behind this -C codegen option.

The -C flag takes values of the form "-C name=value" where the "=value" is
optional for some flags.

Flags affected:

* --llvm-args           => -C llvm-args
* --passes              => -C passes
* --ar                  => -C ar
* --linker              => -C linker
* --link-args           => -C link-args
* --target-cpu          => -C target-cpu
* --target-feature      => -C target-fature
* --android-cross-path  => -C android-cross-path
* --save-temps          => -C save-temps
* --no-rpath            => -C no-rpath
* -Z no-prepopulate     => -C no-prepopulate-passes
* -Z no-vectorize-loops => -C no-vectorize-loops
* -Z no-vectorize-slp   => -C no-vectorize-slp
* -Z soft-float         => -C soft-float
* -Z gen-crate-map      => -C gen-crate-map
* -Z prefer-dynamic     => -C prefer-dynamic
* -Z no-integrated-as   => -C no-integrated-as

As a bonus, this also promotes the -Z extra-debug-info flag to a first class -g
or --debuginfo flag.

* -Z debug-info         => removed
* -Z extra-debug-info   => -g or --debuginfo

Closes #9770
Closes #12000
This commit is contained in:
Alex Crichton 2014-02-06 19:57:09 -08:00
parent 2780d9dd54
commit 071ee96277
112 changed files with 393 additions and 302 deletions

View file

@ -141,7 +141,7 @@ endif
# worry about the distribution of one file (with its native dynamic # worry about the distribution of one file (with its native dynamic
# dependencies) # dependencies)
RUSTFLAGS_STAGE0 += -Z prefer-dynamic RUSTFLAGS_STAGE0 += -Z prefer-dynamic
RUSTFLAGS_STAGE1 += -Z prefer-dynamic RUSTFLAGS_STAGE1 += -C prefer-dynamic
# platform-specific auto-configuration # platform-specific auto-configuration
include $(CFG_SRC_DIR)mk/platform.mk include $(CFG_SRC_DIR)mk/platform.mk

View file

@ -27,18 +27,15 @@ Display this message
\fB\-L\fR PATH \fB\-L\fR PATH
Add a directory to the library search path Add a directory to the library search path
.TP .TP
\fB\-\-linker\fR LINKER
Program to use for linking instead of the default
.TP
\fB\-\-link-args\fR FLAGS
A space-separated list of flags passed to the linker
.TP
\fB\-\-ls\fR \fB\-\-ls\fR
List the symbols defined by a library crate List the symbols defined by a library crate
.TP .TP
\fB\-\-no\-trans\fR \fB\-\-no\-trans\fR
Run all passes except translation; no output Run all passes except translation; no output
.TP .TP
\fB\-g\fR, \fB\-\-debuginfo\fR
Emit DWARF debug information into object files generated.
.TP
\fB\-O\fR \fB\-O\fR
Equivalent to \fI\-\-opt\-level=2\fR Equivalent to \fI\-\-opt\-level=2\fR
.TP .TP
@ -48,11 +45,6 @@ Write output to <filename>. Ignored if more than one --emit is specified.
\fB\-\-opt\-level\fR LEVEL \fB\-\-opt\-level\fR LEVEL
Optimize with possible levels 0-3 Optimize with possible levels 0-3
.TP .TP
\fB\-\-passes\fR NAMES
Comma- or space-separated list of optimization passes. Overrides
the default passes for the optimization level. A value of 'list'
will list the available passes.
.TP
\fB\-\-out\-dir\fR DIR \fB\-\-out\-dir\fR DIR
Write output to compiler-chosen filename in <dir>. Ignored if -o is specified. Write output to compiler-chosen filename in <dir>. Ignored if -o is specified.
(default the current directory) (default the current directory)
@ -66,9 +58,6 @@ Pretty-print the input instead of compiling; valid types are: normal
expanded, with type annotations), or identified (fully parenthesized, expanded, with type annotations), or identified (fully parenthesized,
AST nodes and blocks with IDs) AST nodes and blocks with IDs)
.TP .TP
\fB\-\-save\-temps\fR
Write intermediate files (.bc, .opt.bc, .o) in addition to normal output
.TP
\fB\-\-sysroot\fR PATH \fB\-\-sysroot\fR PATH
Override the system root Override the system root
.TP .TP
@ -80,12 +69,6 @@ Target triple cpu-manufacturer-kernel[-os] to compile for (see
http://sources.redhat.com/autobook/autobook/autobook_17.html http://sources.redhat.com/autobook/autobook/autobook_17.html
for details) for details)
.TP .TP
\fB\-\-target-feature\fR TRIPLE
Target-specific attributes (see llc -mattr=help for details)
.TP
\fB\-\-android-cross-path\fR PATH
The path to the Android NDK
.TP
\fB\-W\fR help \fB\-W\fR help
Print 'lint' options and default settings Print 'lint' options and default settings
.TP .TP
@ -104,9 +87,80 @@ Set lint forbidden
\fB\-Z\fR FLAG \fB\-Z\fR FLAG
Set internal debugging options. Use "-Z help" to print available options. Set internal debugging options. Use "-Z help" to print available options.
.TP .TP
\fB\-C\fR FLAG[=VAL], \fB\-\-codegen\fR FLAG[=VAL]
Set a codegen-related flag to the value specifie.d Use "-C help" to print
available flags. See CODEGEN OPTIONS below
.TP
\fB\-v\fR, \fB\-\-version\fR \fB\-v\fR, \fB\-\-version\fR
Print version info and exit Print version info and exit
.SH CODEGEN OPTIONS
.TP
\fBar\fR=/path/to/ar
Path to the archive utility to use when assembling archives.
.TP
\fBlinker\fR=/path/to/cc
Path to the linker utility to use when linking libraries, executables, and
objects.
.TP
\fBlink-args\fR='-flag1 -flag2'
A space-separated list of extra arguments to pass to the linker when the linker
is invoked.
.TP
\fBtarget-cpu\fR=help
Selects a target processor. If the value is 'help', then a list of available
cpus is printed.
.TP
\fBtarget-feature\fR='+feature1 -feature2'
A space-separated list of features to enable or disable for the target. A
preceding '+' enables a feature while a preceding '-' disables it. Available
features can be discovered through target-cpu=help.
.TP
\fBpasses\fR=list
A space-separated list of extra LLVM passes to run. A value of 'list' will
cause rustc to print all known passes and exit. The passes specified are
appended at the end of the normal pass manager.
.TP
\fBllvm-args\fR='-arg1 -arg2'
A space-separted list of argument to pass through to LLVM.
.TP
\fBsave-temps\fR
If specified, the compiler will save more files (.bc, .o, .no-opt.bc) generated
throughout compilation in the output directory.
.TP
\fBandroid-cross-path\fR=path/to/ndk/bin
Directory to find the Android NDK cross-compilation tools
.TP
\fBno-rpath\fR
If specified, then the rpath value for dynamic libraries will not be set in
either dynamic library or executable outputs.
.TP
\fBno-prepopulate-passes\fR
Suppresses pre-population of the LLVM pass manager that is run over the module.
.TP
\fBno-vectorize-loops\fR
Suppresses running the loop vectorization LLVM pass, regardless of optimization
level.
.TP
\fBno-vectorize-slp\fR
Suppresses running the LLVM SLP vectorization pass, regardless of optimization
level.
.TP
\fBsoft-float\fR
Generates software floating point library calls instead of hardware
instructions.
.TP
\fBgen-crate-map\fR
Forces generate of a toplevel crate map. May be required for logging to work
when rust is embedded into another application.
.TP
\fBprefer-dynamic\fR
Prefers dynamic linking to static linking.
.TP
\fBno-integrated-as\fR
Force usage of an external assembler rather than LLVM's integrated one.
.SH "EXAMPLES" .SH "EXAMPLES"
To build an executable from a source file with a main function: To build an executable from a source file with a main function:
$ rustc -o hello hello.rs $ rustc -o hello hello.rs
@ -117,8 +171,8 @@ To build a library from a source file:
To build either with a crate (.rs) file: To build either with a crate (.rs) file:
$ rustc hello.rs $ rustc hello.rs
To build an executable with debug info (experimental): To build an executable with debug info:
$ rustc -Z debug-info -o hello hello.rs $ rustc -g -o hello hello.rs
.SH "SEE ALSO" .SH "SEE ALSO"

View file

@ -300,8 +300,8 @@ CFG_PATH_MUNGE_arm-linux-androideabi := true
CFG_LDPATH_arm-linux-androideabi := CFG_LDPATH_arm-linux-androideabi :=
CFG_RUN_arm-linux-androideabi= CFG_RUN_arm-linux-androideabi=
CFG_RUN_TARG_arm-linux-androideabi= CFG_RUN_TARG_arm-linux-androideabi=
RUSTC_FLAGS_arm-linux-androideabi :=--android-cross-path=$(CFG_ANDROID_CROSS_PATH) RUSTC_FLAGS_arm-linux-androideabi :=-C android-cross-path=$(CFG_ANDROID_CROSS_PATH)
RUSTC_CROSS_FLAGS_arm-linux-androideabi :=--android-cross-path=$(CFG_ANDROID_CROSS_PATH) RUSTC_CROSS_FLAGS_arm-linux-androideabi :=-C android-cross-path=$(CFG_ANDROID_CROSS_PATH)
# arm-unknown-linux-gnueabihf configuration # arm-unknown-linux-gnueabihf configuration
CROSS_PREFIX_arm-unknown-linux-gnueabihf=arm-linux-gnueabihf- CROSS_PREFIX_arm-unknown-linux-gnueabihf=arm-linux-gnueabihf-

View file

@ -530,7 +530,7 @@ CTEST_RUSTC_FLAGS := $$(subst --cfg ndebug,,$$(CFG_RUSTC_FLAGS))
# There's no need our entire test suite to take up gigabytes of space on disk # There's no need our entire test suite to take up gigabytes of space on disk
# including copies of libstd/libextra all over the place # including copies of libstd/libextra all over the place
CTEST_RUSTC_FLAGS := $$(CTEST_RUSTC_FLAGS) -Z prefer-dynamic CTEST_RUSTC_FLAGS := $$(CTEST_RUSTC_FLAGS) -C prefer-dynamic
# The tests can not be optimized while the rest of the compiler is optimized, so # The tests can not be optimized while the rest of the compiler is optimized, so
# filter out the optimization (if any) from rustc and then figure out if we need # filter out the optimization (if any) from rustc and then figure out if we need

View file

@ -332,8 +332,8 @@ fn run_debuginfo_test(config: &config, props: &TestProps, testfile: &Path) {
let args = split_maybe_args(&config.rustcflags); let args = split_maybe_args(&config.rustcflags);
let mut tool_path:~str = ~""; let mut tool_path:~str = ~"";
for arg in args.iter() { for arg in args.iter() {
if arg.contains("--android-cross-path=") { if arg.contains("android-cross-path=") {
tool_path = arg.replace("--android-cross-path=",""); tool_path = arg.replace("android-cross-path=","");
break; break;
} }
} }
@ -1054,7 +1054,7 @@ fn compile_test_and_save_bitcode(config: &config, props: &TestProps,
let aux_dir = aux_output_dir_name(config, testfile); let aux_dir = aux_output_dir_name(config, testfile);
// FIXME (#9639): This needs to handle non-utf8 paths // FIXME (#9639): This needs to handle non-utf8 paths
let link_args = ~[~"-L", aux_dir.as_str().unwrap().to_owned()]; let link_args = ~[~"-L", aux_dir.as_str().unwrap().to_owned()];
let llvm_args = ~[~"--emit=obj", ~"--crate-type=lib", ~"--save-temps"]; let llvm_args = ~[~"--emit=obj", ~"--crate-type=lib", ~"-C", ~"save-temps"];
let args = make_compile_args(config, props, let args = make_compile_args(config, props,
link_args + llvm_args, link_args + llvm_args,
|a, b| ThisFile(make_o_name(a, b)), testfile); |a, b| ThisFile(make_o_name(a, b)), testfile);

View file

@ -3761,7 +3761,7 @@ dependencies will be used:
with the above limitations in dynamic and static libraries, it is required with the above limitations in dynamic and static libraries, it is required
for all upstream dependencies to be in the same format. The next question is for all upstream dependencies to be in the same format. The next question is
whether to prefer a dynamic or a static format. The compiler currently favors whether to prefer a dynamic or a static format. The compiler currently favors
static linking over dynamic linking, but this can be inverted with the `-Z static linking over dynamic linking, but this can be inverted with the `-C
prefer-dynamic` flag to the compiler. prefer-dynamic` flag to the compiler.
What this means is that first the compiler will attempt to find all upstream What this means is that first the compiler will attempt to find all upstream

View file

@ -111,13 +111,13 @@ pub mod write {
fn target_feature<'a>(sess: &'a Session) -> &'a str { fn target_feature<'a>(sess: &'a Session) -> &'a str {
match sess.targ_cfg.os { match sess.targ_cfg.os {
abi::OsAndroid => { abi::OsAndroid => {
if "" == sess.opts.target_feature { if "" == sess.opts.cg.target_feature {
"+v7" "+v7"
} else { } else {
sess.opts.target_feature.as_slice() sess.opts.cg.target_feature.as_slice()
} }
} }
_ => sess.opts.target_feature.as_slice() _ => sess.opts.cg.target_feature.as_slice()
} }
} }
@ -130,7 +130,7 @@ pub mod write {
unsafe { unsafe {
configure_llvm(sess); configure_llvm(sess);
if sess.opts.save_temps { if sess.opts.cg.save_temps {
output.with_extension("no-opt.bc").with_c_str(|buf| { output.with_extension("no-opt.bc").with_c_str(|buf| {
llvm::LLVMWriteBitcodeToFile(llmod, buf); llvm::LLVMWriteBitcodeToFile(llmod, buf);
}) })
@ -142,7 +142,7 @@ pub mod write {
session::Default => lib::llvm::CodeGenLevelDefault, session::Default => lib::llvm::CodeGenLevelDefault,
session::Aggressive => lib::llvm::CodeGenLevelAggressive, session::Aggressive => lib::llvm::CodeGenLevelAggressive,
}; };
let use_softfp = sess.opts.debugging_opts & session::USE_SOFTFP != 0; let use_softfp = sess.opts.cg.soft_float;
// FIXME: #11906: Omitting frame pointers breaks retrieving the value of a parameter. // FIXME: #11906: Omitting frame pointers breaks retrieving the value of a parameter.
// FIXME: #11954: mac64 unwinding may not work with fp elim // FIXME: #11954: mac64 unwinding may not work with fp elim
@ -151,7 +151,7 @@ pub mod write {
sess.targ_cfg.arch == abi::X86_64); sess.targ_cfg.arch == abi::X86_64);
let tm = sess.targ_cfg.target_strs.target_triple.with_c_str(|T| { let tm = sess.targ_cfg.target_strs.target_triple.with_c_str(|T| {
sess.opts.target_cpu.with_c_str(|CPU| { sess.opts.cg.target_cpu.with_c_str(|CPU| {
target_feature(&sess).with_c_str(|Features| { target_feature(&sess).with_c_str(|Features| {
llvm::LLVMRustCreateTargetMachine( llvm::LLVMRustCreateTargetMachine(
T, CPU, Features, T, CPU, Features,
@ -180,13 +180,13 @@ pub mod write {
}; };
if !sess.no_verify() { assert!(addpass("verify")); } if !sess.no_verify() { assert!(addpass("verify")); }
if !sess.no_prepopulate_passes() { if !sess.opts.cg.no_prepopulate_passes {
llvm::LLVMRustAddAnalysisPasses(tm, fpm, llmod); llvm::LLVMRustAddAnalysisPasses(tm, fpm, llmod);
llvm::LLVMRustAddAnalysisPasses(tm, mpm, llmod); llvm::LLVMRustAddAnalysisPasses(tm, mpm, llmod);
populate_llvm_passes(fpm, mpm, llmod, OptLevel); populate_llvm_passes(fpm, mpm, llmod, OptLevel);
} }
for pass in sess.opts.custom_passes.iter() { for pass in sess.opts.cg.passes.iter() {
pass.with_c_str(|s| { pass.with_c_str(|s| {
if !llvm::LLVMRustAddPass(mpm, s) { if !llvm::LLVMRustAddPass(mpm, s) {
sess.warn(format!("unknown pass {}, ignoring", *pass)); sess.warn(format!("unknown pass {}, ignoring", *pass));
@ -208,7 +208,7 @@ pub mod write {
// emitting an rlib. Whenever an rlib is created, the bytecode is // emitting an rlib. Whenever an rlib is created, the bytecode is
// inserted into the archive in order to allow LTO against it. // inserted into the archive in order to allow LTO against it.
let crate_types = sess.crate_types.borrow(); let crate_types = sess.crate_types.borrow();
if sess.opts.save_temps || if sess.opts.cg.save_temps ||
(crate_types.get().contains(&session::CrateTypeRlib) && (crate_types.get().contains(&session::CrateTypeRlib) &&
sess.opts.output_types.contains(&OutputTypeExe)) { sess.opts.output_types.contains(&OutputTypeExe)) {
output.temp_path(OutputTypeBitcode).with_c_str(|buf| { output.temp_path(OutputTypeBitcode).with_c_str(|buf| {
@ -220,7 +220,7 @@ pub mod write {
time(sess.time_passes(), "all lto passes", (), |()| time(sess.time_passes(), "all lto passes", (), |()|
lto::run(sess, llmod, tm, trans.reachable)); lto::run(sess, llmod, tm, trans.reachable));
if sess.opts.save_temps { if sess.opts.cg.save_temps {
output.with_extension("lto.bc").with_c_str(|buf| { output.with_extension("lto.bc").with_c_str(|buf| {
llvm::LLVMWriteBitcodeToFile(llmod, buf); llvm::LLVMWriteBitcodeToFile(llmod, buf);
}) })
@ -353,10 +353,10 @@ pub mod write {
// Copy what clang does by turning on loop vectorization at O2 and // Copy what clang does by turning on loop vectorization at O2 and
// slp vectorization at O3 // slp vectorization at O3
let vectorize_loop = !sess.no_vectorize_loops() && let vectorize_loop = !sess.opts.cg.no_vectorize_loops &&
(sess.opts.optimize == session::Default || (sess.opts.optimize == session::Default ||
sess.opts.optimize == session::Aggressive); sess.opts.optimize == session::Aggressive);
let vectorize_slp = !sess.no_vectorize_slp() && let vectorize_slp = !sess.opts.cg.no_vectorize_slp &&
sess.opts.optimize == session::Aggressive; sess.opts.optimize == session::Aggressive;
let mut llvm_c_strs = ~[]; let mut llvm_c_strs = ~[];
@ -374,7 +374,7 @@ pub mod write {
if sess.time_llvm_passes() { add("-time-passes"); } if sess.time_llvm_passes() { add("-time-passes"); }
if sess.print_llvm_passes() { add("-debug-pass=Structure"); } if sess.print_llvm_passes() { add("-debug-pass=Structure"); }
for arg in sess.opts.llvm_args.iter() { for arg in sess.opts.cg.llvm_args.iter() {
add(*arg); add(*arg);
} }
@ -745,7 +745,7 @@ pub fn output_lib_filename(lm: &LinkMeta) -> ~str {
} }
pub fn get_cc_prog(sess: Session) -> ~str { pub fn get_cc_prog(sess: Session) -> ~str {
match sess.opts.linker { match sess.opts.cg.linker {
Some(ref linker) => return linker.to_owned(), Some(ref linker) => return linker.to_owned(),
None => {} None => {}
} }
@ -763,7 +763,7 @@ pub fn get_cc_prog(sess: Session) -> ~str {
} }
pub fn get_ar_prog(sess: Session) -> ~str { pub fn get_ar_prog(sess: Session) -> ~str {
match sess.opts.ar { match sess.opts.cg.ar {
Some(ref ar) => return ar.to_owned(), Some(ref ar) => return ar.to_owned(),
None => {} None => {}
} }
@ -773,7 +773,7 @@ pub fn get_ar_prog(sess: Session) -> ~str {
fn get_system_tool(sess: Session, tool: &str) -> ~str { fn get_system_tool(sess: Session, tool: &str) -> ~str {
match sess.targ_cfg.os { match sess.targ_cfg.os {
abi::OsAndroid => match sess.opts.android_cross_path { abi::OsAndroid => match sess.opts.cg.android_cross_path {
Some(ref path) => { Some(ref path) => {
let tool_str = match tool { let tool_str = match tool {
"cc" => "gcc", "cc" => "gcc",
@ -783,7 +783,7 @@ fn get_system_tool(sess: Session, tool: &str) -> ~str {
} }
None => { None => {
sess.fatal(format!("need Android NDK path for the '{}' tool \ sess.fatal(format!("need Android NDK path for the '{}' tool \
(--android-cross-path)", tool)) (-C android-cross-path)", tool))
} }
}, },
_ => tool.to_owned(), _ => tool.to_owned(),
@ -813,7 +813,7 @@ pub fn link_binary(sess: Session,
} }
// Remove the temporary object file and metadata if we aren't saving temps // Remove the temporary object file and metadata if we aren't saving temps
if !sess.opts.save_temps { if !sess.opts.cg.save_temps {
let obj_filename = outputs.temp_path(OutputTypeObject); let obj_filename = outputs.temp_path(OutputTypeObject);
if !sess.opts.output_types.contains(&OutputTypeObject) { if !sess.opts.output_types.contains(&OutputTypeObject) {
remove(sess, &obj_filename); remove(sess, &obj_filename);
@ -969,7 +969,7 @@ fn link_rlib(sess: Session,
// into the archive. // into the archive.
let bc = obj_filename.with_extension("bc"); let bc = obj_filename.with_extension("bc");
a.add_file(&bc, false); a.add_file(&bc, false);
if !sess.opts.save_temps && if !sess.opts.cg.save_temps &&
!sess.opts.output_types.contains(&OutputTypeBitcode) { !sess.opts.output_types.contains(&OutputTypeBitcode) {
remove(sess, &bc); remove(sess, &bc);
} }
@ -1142,7 +1142,7 @@ fn link_args(sess: Session,
args.push(~"-dynamiclib"); args.push(~"-dynamiclib");
args.push(~"-Wl,-dylib"); args.push(~"-Wl,-dylib");
// FIXME (#9639): This needs to handle non-utf8 paths // FIXME (#9639): This needs to handle non-utf8 paths
if !sess.opts.no_rpath { if !sess.opts.cg.no_rpath {
args.push(~"-Wl,-install_name,@rpath/" + args.push(~"-Wl,-install_name,@rpath/" +
out_filename.filename_str().unwrap()); out_filename.filename_str().unwrap());
} }
@ -1163,13 +1163,13 @@ fn link_args(sess: Session,
// FIXME (#2397): At some point we want to rpath our guesses as to // FIXME (#2397): At some point we want to rpath our guesses as to
// where extern libraries might live, based on the // where extern libraries might live, based on the
// addl_lib_search_paths // addl_lib_search_paths
if !sess.opts.no_rpath { if !sess.opts.cg.no_rpath {
args.push_all(rpath::get_rpath_flags(sess, out_filename)); args.push_all(rpath::get_rpath_flags(sess, out_filename));
} }
// Finally add all the linker arguments provided on the command line along // Finally add all the linker arguments provided on the command line along
// with any #[link_args] attributes found inside the crate // with any #[link_args] attributes found inside the crate
args.push_all(sess.opts.linker_args); args.push_all(sess.opts.cg.link_args);
let used_link_args = sess.cstore.get_used_link_args(); let used_link_args = sess.cstore.get_used_link_args();
let used_link_args = used_link_args.borrow(); let used_link_args = used_link_args.borrow();
for arg in used_link_args.get().iter() { for arg in used_link_args.get().iter() {
@ -1235,7 +1235,7 @@ fn add_upstream_rust_crates(args: &mut ~[~str], sess: Session,
} }
let cstore = sess.cstore; let cstore = sess.cstore;
if !dylib && !sess.prefer_dynamic() { if !dylib && !sess.opts.cg.prefer_dynamic {
// With an executable, things get a little interesting. As a limitation // With an executable, things get a little interesting. As a limitation
// of the current implementation, we require that everything must be // of the current implementation, we require that everything must be
// static or everything must be dynamic. The reasons for this are a // static or everything must be dynamic. The reasons for this are a

View file

@ -19,7 +19,7 @@ use std::libc;
pub fn run(sess: session::Session, llmod: ModuleRef, pub fn run(sess: session::Session, llmod: ModuleRef,
tm: TargetMachineRef, reachable: &[~str]) { tm: TargetMachineRef, reachable: &[~str]) {
if sess.prefer_dynamic() { if sess.opts.cg.prefer_dynamic {
sess.err("cannot prefer dynamic linking when performing LTO"); sess.err("cannot prefer dynamic linking when performing LTO");
sess.note("only 'staticlib' and 'bin' outputs are supported with LTO"); sess.note("only 'staticlib' and 'bin' outputs are supported with LTO");
sess.abort_if_errors(); sess.abort_if_errors();

View file

@ -382,7 +382,7 @@ pub fn phase_4_translate_to_llvm(sess: Session,
pub fn phase_5_run_llvm_passes(sess: Session, pub fn phase_5_run_llvm_passes(sess: Session,
trans: &CrateTranslation, trans: &CrateTranslation,
outputs: &OutputFilenames) { outputs: &OutputFilenames) {
if sess.no_integrated_as() { if sess.opts.cg.no_integrated_as {
let output_type = link::OutputTypeAssembly; let output_type = link::OutputTypeAssembly;
time(sess.time_passes(), "LLVM passes", (), |_| time(sess.time_passes(), "LLVM passes", (), |_|
@ -391,7 +391,7 @@ pub fn phase_5_run_llvm_passes(sess: Session,
link::write::run_assembler(sess, outputs); link::write::run_assembler(sess, outputs);
// Remove assembly source, unless --save-temps was specified // Remove assembly source, unless --save-temps was specified
if !sess.opts.save_temps { if !sess.opts.cg.save_temps {
fs::unlink(&outputs.temp_path(link::OutputTypeAssembly)).unwrap(); fs::unlink(&outputs.temp_path(link::OutputTypeAssembly)).unwrap();
} }
} else { } else {
@ -747,7 +747,6 @@ pub fn build_session_options(binary: ~str,
let parse_only = matches.opt_present("parse-only"); let parse_only = matches.opt_present("parse-only");
let no_trans = matches.opt_present("no-trans"); let no_trans = matches.opt_present("no-trans");
let no_analysis = matches.opt_present("no-analysis"); let no_analysis = matches.opt_present("no-analysis");
let no_rpath = matches.opt_present("no-rpath");
let lint_levels = [lint::allow, lint::warn, let lint_levels = [lint::allow, lint::warn,
lint::deny, lint::forbid]; lint::deny, lint::forbid];
@ -817,9 +816,6 @@ pub fn build_session_options(binary: ~str,
let sysroot_opt = matches.opt_str("sysroot").map(|m| @Path::new(m)); let sysroot_opt = matches.opt_str("sysroot").map(|m| @Path::new(m));
let target = matches.opt_str("target").unwrap_or(host_triple()); let target = matches.opt_str("target").unwrap_or(host_triple());
let target_cpu = matches.opt_str("target-cpu").unwrap_or(~"generic");
let target_feature = matches.opt_str("target-feature").unwrap_or(~"");
let save_temps = matches.opt_present("save-temps");
let opt_level = { let opt_level = {
if (debugging_opts & session::NO_OPT) != 0 { if (debugging_opts & session::NO_OPT) != 0 {
No No
@ -841,85 +837,77 @@ pub fn build_session_options(binary: ~str,
} else { No } } else { No }
}; };
let gc = debugging_opts & session::GC != 0; let gc = debugging_opts & session::GC != 0;
let extra_debuginfo = debugging_opts & session::EXTRA_DEBUG_INFO != 0; let debuginfo = matches.opt_present("g") || matches.opt_present("debuginfo");
let debuginfo = debugging_opts & session::DEBUG_INFO != 0 ||
extra_debuginfo;
let addl_lib_search_paths = matches.opt_strs("L").map(|s| { let addl_lib_search_paths = matches.opt_strs("L").map(|s| {
Path::new(s.as_slice()) Path::new(s.as_slice())
}).move_iter().collect(); }).move_iter().collect();
let ar = matches.opt_str("ar");
let linker = matches.opt_str("linker");
let linker_args = matches.opt_strs("link-args").flat_map( |a| {
a.split(' ').filter_map(|arg| {
if arg.is_empty() {
None
} else {
Some(arg.to_owned())
}
}).collect()
});
let cfg = parse_cfgspecs(matches.opt_strs("cfg")); let cfg = parse_cfgspecs(matches.opt_strs("cfg"));
let test = matches.opt_present("test"); let test = matches.opt_present("test");
let android_cross_path = matches.opt_str("android-cross-path");
let write_dependency_info = (matches.opt_present("dep-info"), let write_dependency_info = (matches.opt_present("dep-info"),
matches.opt_str("dep-info").map(|p| Path::new(p))); matches.opt_str("dep-info").map(|p| Path::new(p)));
let custom_passes = match matches.opt_str("passes") {
None => ~[],
Some(s) => {
s.split(|c: char| c == ' ' || c == ',').map(|s| {
s.trim().to_owned()
}).collect()
}
};
let llvm_args = match matches.opt_str("llvm-args") {
None => ~[],
Some(s) => {
s.split(|c: char| c == ' ' || c == ',').map(|s| {
s.trim().to_owned()
}).collect()
}
};
let print_metas = (matches.opt_present("crate-id"), let print_metas = (matches.opt_present("crate-id"),
matches.opt_present("crate-name"), matches.opt_present("crate-name"),
matches.opt_present("crate-file-name")); matches.opt_present("crate-file-name"));
let cg = build_codegen_options(matches);
let sopts = @session::Options { let sopts = @session::Options {
crate_types: crate_types, crate_types: crate_types,
gc: gc, gc: gc,
optimize: opt_level, optimize: opt_level,
custom_passes: custom_passes,
llvm_args: llvm_args,
debuginfo: debuginfo, debuginfo: debuginfo,
extra_debuginfo: extra_debuginfo,
lint_opts: lint_opts, lint_opts: lint_opts,
save_temps: save_temps,
output_types: output_types, output_types: output_types,
addl_lib_search_paths: @RefCell::new(addl_lib_search_paths), addl_lib_search_paths: @RefCell::new(addl_lib_search_paths),
ar: ar,
linker: linker,
linker_args: linker_args,
maybe_sysroot: sysroot_opt, maybe_sysroot: sysroot_opt,
target_triple: target, target_triple: target,
target_cpu: target_cpu,
target_feature: target_feature,
cfg: cfg, cfg: cfg,
binary: binary, binary: binary,
test: test, test: test,
parse_only: parse_only, parse_only: parse_only,
no_trans: no_trans, no_trans: no_trans,
no_analysis: no_analysis, no_analysis: no_analysis,
no_rpath: no_rpath,
debugging_opts: debugging_opts, debugging_opts: debugging_opts,
android_cross_path: android_cross_path,
write_dependency_info: write_dependency_info, write_dependency_info: write_dependency_info,
print_metas: print_metas, print_metas: print_metas,
cg: cg,
}; };
return sopts; return sopts;
} }
pub fn build_codegen_options(matches: &getopts::Matches)
-> session::CodegenOptions
{
let mut cg = session::basic_codegen_options();
for option in matches.opt_strs("C").move_iter() {
let mut iter = option.splitn('=', 1);
let key = iter.next().unwrap();
let value = iter.next();
let option_to_lookup = key.replace("-", "_");
let mut found = false;
for &(candidate, setter, _) in session::CG_OPTIONS.iter() {
if option_to_lookup.as_slice() != candidate { continue }
if !setter(&mut cg, value) {
match value {
Some(..) => early_error(format!("codegen option `{}` takes \
no value", key)),
None => early_error(format!("codegen option `{0}` requires \
a value (-C {0}=<value>)",
key))
}
}
found = true;
break;
}
if !found {
early_error(format!("unknown codegen option: `{}`", key));
}
}
return cg;
}
pub fn build_session(sopts: @session::Options, pub fn build_session(sopts: @session::Options,
local_crate_source_file: Option<Path>) local_crate_source_file: Option<Path>)
-> Session { -> Session {
@ -1002,15 +990,12 @@ pub fn optgroups() -> ~[getopts::OptGroup] {
optmulti("", "emit", "Comma separated list of types of output for the compiler optmulti("", "emit", "Comma separated list of types of output for the compiler
to emit", to emit",
"[asm|bc|ir|obj|link]"), "[asm|bc|ir|obj|link]"),
optopt("", "linker", "Program to use for linking instead of the default.", "LINKER"),
optopt("", "ar", "Program to use for managing archives instead of the default.", "AR"),
optflag("", "crate-id", "Output the crate id and exit"), optflag("", "crate-id", "Output the crate id and exit"),
optflag("", "crate-name", "Output the crate name and exit"), optflag("", "crate-name", "Output the crate name and exit"),
optflag("", "crate-file-name", "Output the file(s) that would be written if compilation \ optflag("", "crate-file-name", "Output the file(s) that would be written if compilation \
continued and exit"), continued and exit"),
optmulti("", "link-args", "FLAGS is a space-separated list of flags
passed to the linker", "FLAGS"),
optflag("", "ls", "List the symbols defined by a library crate"), optflag("", "ls", "List the symbols defined by a library crate"),
optflag("g", "debuginfo", "Emit DWARF debug info to the objects created"),
optflag("", "no-trans", optflag("", "no-trans",
"Run all passes except translation; no output"), "Run all passes except translation; no output"),
optflag("", "no-analysis", optflag("", "no-analysis",
@ -1020,13 +1005,6 @@ pub fn optgroups() -> ~[getopts::OptGroup] {
optopt("o", "", "Write output to <filename>", "FILENAME"), optopt("o", "", "Write output to <filename>", "FILENAME"),
optopt("", "opt-level", optopt("", "opt-level",
"Optimize with possible levels 0-3", "LEVEL"), "Optimize with possible levels 0-3", "LEVEL"),
optopt("", "passes", "Comma or space separated list of pass names to use. \
Appends to the default list of passes to run for the \
specified current optimization level. A value of \
\"list\" will list all of the available passes", "NAMES"),
optopt("", "llvm-args", "A list of arguments to pass to llvm, comma \
separated", "ARGS"),
optflag("", "no-rpath", "Disables setting the rpath in libs/exes"),
optopt( "", "out-dir", optopt( "", "out-dir",
"Write output to compiler-chosen filename "Write output to compiler-chosen filename
in <dir>", "DIR"), in <dir>", "DIR"),
@ -1041,9 +1019,6 @@ pub fn optgroups() -> ~[getopts::OptGroup] {
AST nodes and blocks with IDs)", "TYPE"), AST nodes and blocks with IDs)", "TYPE"),
optflagopt("", "dep-info", optflagopt("", "dep-info",
"Output dependency info to <filename> after compiling", "FILENAME"), "Output dependency info to <filename> after compiling", "FILENAME"),
optflag("", "save-temps",
"Write intermediate files (.bc, .opt.bc, .o)
in addition to normal output"),
optopt("", "sysroot", optopt("", "sysroot",
"Override the system root", "PATH"), "Override the system root", "PATH"),
optflag("", "test", "Build a test harness"), optflag("", "test", "Build a test harness"),
@ -1051,14 +1026,6 @@ pub fn optgroups() -> ~[getopts::OptGroup] {
"Target triple cpu-manufacturer-kernel[-os] "Target triple cpu-manufacturer-kernel[-os]
to compile for (see chapter 3.4 of http://www.sourceware.org/autobook/ to compile for (see chapter 3.4 of http://www.sourceware.org/autobook/
for details)", "TRIPLE"), for details)", "TRIPLE"),
optopt("", "target-cpu",
"Select target processor (llc -mcpu=help
for details)", "CPU"),
optopt("", "target-feature",
"Target specific attributes (llc -mattr=help
for details)", "FEATURE"),
optopt("", "android-cross-path",
"The path to the Android NDK", "PATH"),
optmulti("W", "warn", optmulti("W", "warn",
"Set lint warnings", "OPT"), "Set lint warnings", "OPT"),
optmulti("A", "allow", optmulti("A", "allow",
@ -1067,6 +1034,8 @@ pub fn optgroups() -> ~[getopts::OptGroup] {
"Set lint denied", "OPT"), "Set lint denied", "OPT"),
optmulti("F", "forbid", optmulti("F", "forbid",
"Set lint forbidden", "OPT"), "Set lint forbidden", "OPT"),
optmulti("C", "codegen",
"Set a codegen option", "OPT[=VALUE]"),
optmulti("Z", "", "Set internal debugging options", "FLAG"), optmulti("Z", "", "Set internal debugging options", "FLAG"),
optflag( "v", "version", optflag( "v", "version",
"Print version info and exit"), "Print version info and exit"),

View file

@ -65,17 +65,8 @@ debugging_opts!(
META_STATS, META_STATS,
NO_OPT, NO_OPT,
GC, GC,
DEBUG_INFO,
EXTRA_DEBUG_INFO,
PRINT_LINK_ARGS, PRINT_LINK_ARGS,
PRINT_LLVM_PASSES, PRINT_LLVM_PASSES,
NO_VECTORIZE_LOOPS,
NO_VECTORIZE_SLP,
NO_PREPOPULATE_PASSES,
USE_SOFTFP,
GEN_CRATE_MAP,
PREFER_DYNAMIC,
NO_INTEGRATED_AS,
LTO LTO
] ]
0 0
@ -104,26 +95,9 @@ pub fn debugging_opts_map() -> ~[(&'static str, &'static str, u64)] {
("print-link-args", "Print the arguments passed to the linker", ("print-link-args", "Print the arguments passed to the linker",
PRINT_LINK_ARGS), PRINT_LINK_ARGS),
("gc", "Garbage collect shared data (experimental)", GC), ("gc", "Garbage collect shared data (experimental)", GC),
("extra-debug-info", "Extra debugging info (experimental)",
EXTRA_DEBUG_INFO),
("debug-info", "Produce debug info (experimental)", DEBUG_INFO),
("print-llvm-passes", ("print-llvm-passes",
"Prints the llvm optimization passes being run", "Prints the llvm optimization passes being run",
PRINT_LLVM_PASSES), PRINT_LLVM_PASSES),
("no-prepopulate-passes",
"Don't pre-populate the pass managers with a list of passes, only use \
the passes from --passes",
NO_PREPOPULATE_PASSES),
("no-vectorize-loops",
"Don't run the loop vectorization optimization passes",
NO_VECTORIZE_LOOPS),
("no-vectorize-slp", "Don't run LLVM's SLP vectorization passes",
NO_VECTORIZE_SLP),
("soft-float", "Generate software floating point library calls", USE_SOFTFP),
("gen-crate-map", "Force generation of a toplevel crate map", GEN_CRATE_MAP),
("prefer-dynamic", "Prefer dynamic linking to static linking", PREFER_DYNAMIC),
("no-integrated-as",
"Use external assembler rather than LLVM's integrated one", NO_INTEGRATED_AS),
("lto", "Perform LLVM link-time optimizations", LTO), ("lto", "Perform LLVM link-time optimizations", LTO),
] ]
} }
@ -144,24 +118,15 @@ pub struct Options {
gc: bool, gc: bool,
optimize: OptLevel, optimize: OptLevel,
custom_passes: ~[~str],
llvm_args: ~[~str],
debuginfo: bool, debuginfo: bool,
extra_debuginfo: bool,
lint_opts: ~[(lint::Lint, lint::level)], lint_opts: ~[(lint::Lint, lint::level)],
save_temps: bool,
output_types: ~[back::link::OutputType], output_types: ~[back::link::OutputType],
// This was mutable for rustpkg, which updates search paths based on the // This was mutable for rustpkg, which updates search paths based on the
// parsed code. It remains mutable in case its replacements wants to use // parsed code. It remains mutable in case its replacements wants to use
// this. // this.
addl_lib_search_paths: @RefCell<HashSet<Path>>, addl_lib_search_paths: @RefCell<HashSet<Path>>,
ar: Option<~str>,
linker: Option<~str>,
linker_args: ~[~str],
maybe_sysroot: Option<@Path>, maybe_sysroot: Option<@Path>,
target_triple: ~str, target_triple: ~str,
target_cpu: ~str,
target_feature: ~str,
// User-specified cfg meta items. The compiler itself will add additional // User-specified cfg meta items. The compiler itself will add additional
// items to the crate config, and during parsing the entire crate config // items to the crate config, and during parsing the entire crate config
// will be added to the crate AST node. This should not be used for // will be added to the crate AST node. This should not be used for
@ -172,13 +137,12 @@ pub struct Options {
parse_only: bool, parse_only: bool,
no_trans: bool, no_trans: bool,
no_analysis: bool, no_analysis: bool,
no_rpath: bool,
debugging_opts: u64, debugging_opts: u64,
android_cross_path: Option<~str>,
/// Whether to write dependency files. It's (enabled, optional filename). /// Whether to write dependency files. It's (enabled, optional filename).
write_dependency_info: (bool, Option<Path>), write_dependency_info: (bool, Option<Path>),
/// Crate id-related things to maybe print. It's (crate_id, crate_name, crate_file_name). /// Crate id-related things to maybe print. It's (crate_id, crate_name, crate_file_name).
print_metas: (bool, bool, bool), print_metas: (bool, bool, bool),
cg: CodegenOptions,
} }
// The type of entry function, so // The type of entry function, so
@ -329,24 +293,6 @@ impl Session_ {
pub fn print_llvm_passes(&self) -> bool { pub fn print_llvm_passes(&self) -> bool {
self.debugging_opt(PRINT_LLVM_PASSES) self.debugging_opt(PRINT_LLVM_PASSES)
} }
pub fn no_prepopulate_passes(&self) -> bool {
self.debugging_opt(NO_PREPOPULATE_PASSES)
}
pub fn no_vectorize_loops(&self) -> bool {
self.debugging_opt(NO_VECTORIZE_LOOPS)
}
pub fn no_vectorize_slp(&self) -> bool {
self.debugging_opt(NO_VECTORIZE_SLP)
}
pub fn gen_crate_map(&self) -> bool {
self.debugging_opt(GEN_CRATE_MAP)
}
pub fn prefer_dynamic(&self) -> bool {
self.debugging_opt(PREFER_DYNAMIC)
}
pub fn no_integrated_as(&self) -> bool {
self.debugging_opt(NO_INTEGRATED_AS)
}
pub fn lto(&self) -> bool { pub fn lto(&self) -> bool {
self.debugging_opt(LTO) self.debugging_opt(LTO)
} }
@ -381,35 +327,132 @@ pub fn basic_options() -> @Options {
crate_types: ~[], crate_types: ~[],
gc: false, gc: false,
optimize: No, optimize: No,
custom_passes: ~[],
llvm_args: ~[],
debuginfo: false, debuginfo: false,
extra_debuginfo: false,
lint_opts: ~[], lint_opts: ~[],
save_temps: false,
output_types: ~[], output_types: ~[],
addl_lib_search_paths: @RefCell::new(HashSet::new()), addl_lib_search_paths: @RefCell::new(HashSet::new()),
ar: None,
linker: None,
linker_args: ~[],
maybe_sysroot: None, maybe_sysroot: None,
target_triple: host_triple(), target_triple: host_triple(),
target_cpu: ~"generic",
target_feature: ~"",
cfg: ~[], cfg: ~[],
binary: ~"rustc", binary: ~"rustc",
test: false, test: false,
parse_only: false, parse_only: false,
no_trans: false, no_trans: false,
no_analysis: false, no_analysis: false,
no_rpath: false,
debugging_opts: 0, debugging_opts: 0,
android_cross_path: None,
write_dependency_info: (false, None), write_dependency_info: (false, None),
print_metas: (false, false, false), print_metas: (false, false, false),
cg: basic_codegen_options(),
} }
} }
/// Declare a macro that will define all CodegenOptions fields and parsers all
/// at once. The goal of this macro is to define an interface that can be
/// programmatically used by the option parser in order to initialize the struct
/// without hardcoding field names all over the place.
///
/// The goal is to invoke this macro once with the correct fields, and then this
/// macro generates all necessary code. The main gotcha of this macro is the
/// cgsetters module which is a bunch of generated code to parse an option into
/// its respective field in the struct. There are a few hand-written parsers for
/// parsing specific types of values in this module.
macro_rules! cgoptions(
($($opt:ident : $t:ty = ($init:expr, $parse:ident, $desc:expr)),* ,) =>
(
#[deriving(Clone)]
pub struct CodegenOptions { $($opt: $t),* }
pub fn basic_codegen_options() -> CodegenOptions {
CodegenOptions { $($opt: $init),* }
}
pub type CodegenSetter = fn(&mut CodegenOptions, v: Option<&str>) -> bool;
pub static CG_OPTIONS: &'static [(&'static str, CodegenSetter,
&'static str)] =
&[ $( (stringify!($opt), cgsetters::$opt, $desc) ),* ];
mod cgsetters {
use super::CodegenOptions;
$(
pub fn $opt(cg: &mut CodegenOptions, v: Option<&str>) -> bool {
$parse(&mut cg.$opt, v)
}
)*
fn parse_bool(slot: &mut bool, v: Option<&str>) -> bool {
match v {
Some(..) => false,
None => { *slot = true; true }
}
}
fn parse_opt_string(slot: &mut Option<~str>, v: Option<&str>) -> bool {
match v {
Some(s) => { *slot = Some(s.to_owned()); true },
None => false,
}
}
fn parse_string(slot: &mut ~str, v: Option<&str>) -> bool {
match v {
Some(s) => { *slot = s.to_owned(); true },
None => false,
}
}
fn parse_list(slot: &mut ~[~str], v: Option<&str>) -> bool {
match v {
Some(s) => {
for s in s.words() {
slot.push(s.to_owned());
}
true
},
None => false,
}
}
}
) )
cgoptions!(
ar: Option<~str> = (None, parse_opt_string,
"tool to assemble archives with"),
linker: Option<~str> = (None, parse_opt_string,
"system linker to link outputs with"),
link_args: ~[~str] = (~[], parse_list,
"extra arguments to pass to the linker (space separated)"),
target_cpu: ~str = (~"generic", parse_string,
"select target processor (llc -mcpu=help for details)"),
target_feature: ~str = (~"", parse_string,
"target specific attributes (llc -mattr=help for details)"),
passes: ~[~str] = (~[], parse_list,
"a list of extra LLVM passes to run (space separated)"),
llvm_args: ~[~str] = (~[], parse_list,
"a list of arguments to pass to llvm (space separated)"),
save_temps: bool = (false, parse_bool,
"save all temporary output files during compilation"),
android_cross_path: Option<~str> = (None, parse_opt_string,
"the path to the Android NDK"),
no_rpath: bool = (false, parse_bool,
"disables setting the rpath in libs/exes"),
no_prepopulate_passes: bool = (false, parse_bool,
"don't pre-populate the pass manager with a list of passes"),
no_vectorize_loops: bool = (false, parse_bool,
"don't run the loop vectorization optimization passes"),
no_vectorize_slp: bool = (false, parse_bool,
"don't run LLVM's SLP vectorization pass"),
soft_float: bool = (false, parse_bool,
"generate software floating point library calls"),
gen_crate_map: bool = (false, parse_bool,
"force generation of a toplevel crate map"),
prefer_dynamic: bool = (false, parse_bool,
"prefer dynamic linking to static linking"),
no_integrated_as: bool = (false, parse_bool,
"use an external assembler rather than LLVM's integrated one"),
)
// Seems out of place, but it uses session, so I'm putting it here // Seems out of place, but it uses session, so I'm putting it here
pub fn expect<T:Clone>(sess: Session, opt: Option<T>, msg: || -> ~str) -> T { pub fn expect<T:Clone>(sess: Session, opt: Option<T>, msg: || -> ~str) -> T {
diagnostic::expect(sess.diagnostic(), opt, msg) diagnostic::expect(sess.diagnostic(), opt, msg)

View file

@ -168,7 +168,7 @@ Available lint options:
fn padded(max: uint, s: &str) -> ~str { fn padded(max: uint, s: &str) -> ~str {
" ".repeat(max - s.len()) + s " ".repeat(max - s.len()) + s
} }
println!("{}", "\nAvailable lint checks:\n"); // FIXME: #9970 println!("\nAvailable lint checks:\n");
println!(" {} {:7.7s} {}", println!(" {} {:7.7s} {}",
padded(max_key, "name"), "default", "meaning"); padded(max_key, "name"), "default", "meaning");
println!(" {} {:7.7s} {}\n", println!(" {} {:7.7s} {}\n",
@ -184,7 +184,7 @@ Available lint options:
} }
pub fn describe_debug_flags() { pub fn describe_debug_flags() {
println!("{}", "\nAvailable debug options:\n"); // FIXME: #9970 println!("\nAvailable debug options:\n");
let r = session::debugging_opts_map(); let r = session::debugging_opts_map();
for tuple in r.iter() { for tuple in r.iter() {
match *tuple { match *tuple {
@ -195,6 +195,22 @@ pub fn describe_debug_flags() {
} }
} }
pub fn describe_codegen_flags() {
println!("\nAvailable codegen options:\n");
let mut cg = session::basic_codegen_options();
for &(name, parser, desc) in session::CG_OPTIONS.iter() {
// we invoke the parser function on `None` to see if this option needs
// an argument or not.
let (width, extra) = if parser(&mut cg, None) {
(25, "")
} else {
(21, "=val")
};
println!(" -C {:>width$s}{} -- {}", name.replace("_", "-"),
extra, desc, width=width);
}
}
pub fn run_compiler(args: &[~str]) { pub fn run_compiler(args: &[~str]) {
let mut args = args.to_owned(); let mut args = args.to_owned();
let binary = args.shift().unwrap(); let binary = args.shift().unwrap();
@ -227,7 +243,13 @@ pub fn run_compiler(args: &[~str]) {
return; return;
} }
if matches.opt_str("passes") == Some(~"list") { let cg_flags = matches.opt_strs("C");
if cg_flags.iter().any(|x| x == &~"help") {
describe_codegen_flags();
return;
}
if cg_flags.contains(&~"passes=list") {
unsafe { lib::llvm::llvm::LLVMRustPrintPasses(); } unsafe { lib::llvm::llvm::LLVMRustPrintPasses(); }
return; return;
} }

View file

@ -1371,7 +1371,7 @@ fn insert_lllocals<'a>(bcx: &'a Block<'a>,
llmap.get().insert(binding_info.id, datum); llmap.get().insert(binding_info.id, datum);
} }
if bcx.sess().opts.extra_debuginfo { if bcx.sess().opts.debuginfo {
debuginfo::create_match_binding_metadata(bcx, debuginfo::create_match_binding_metadata(bcx,
ident, ident,
binding_info.id, binding_info.id,
@ -2030,7 +2030,7 @@ pub fn store_arg<'a>(mut bcx: &'a Block<'a>,
// like `x: T` // like `x: T`
let arg_ty = node_id_type(bcx, pat.id); let arg_ty = node_id_type(bcx, pat.id);
if type_of::arg_is_indirect(bcx.ccx(), arg_ty) if type_of::arg_is_indirect(bcx.ccx(), arg_ty)
&& !bcx.ccx().sess.opts.extra_debuginfo { && !bcx.ccx().sess.opts.debuginfo {
// Don't copy an indirect argument to an alloca, the caller // Don't copy an indirect argument to an alloca, the caller
// already put it in a temporary alloca and gave it up, unless // already put it in a temporary alloca and gave it up, unless
// we emit extra-debug-info, which requires local allocas :(. // we emit extra-debug-info, which requires local allocas :(.

View file

@ -568,7 +568,7 @@ pub fn get_res_dtor(ccx: @CrateContext,
// Structural comparison: a rather involved form of glue. // Structural comparison: a rather involved form of glue.
pub fn maybe_name_value(cx: &CrateContext, v: ValueRef, s: &str) { pub fn maybe_name_value(cx: &CrateContext, v: ValueRef, s: &str) {
if cx.sess.opts.save_temps { if cx.sess.opts.cg.save_temps {
s.with_c_str(|buf| { s.with_c_str(|buf| {
unsafe { unsafe {
llvm::LLVMSetValueName(v, buf) llvm::LLVMSetValueName(v, buf)
@ -1389,7 +1389,7 @@ fn copy_args_to_allocas<'a>(fcx: &FunctionContext<'a>,
bcx = _match::store_arg(bcx, args[i].pat, arg_datum, arg_scope_id); bcx = _match::store_arg(bcx, args[i].pat, arg_datum, arg_scope_id);
if fcx.ccx.sess.opts.extra_debuginfo { if fcx.ccx.sess.opts.debuginfo {
debuginfo::create_argument_metadata(bcx, &args[i]); debuginfo::create_argument_metadata(bcx, &args[i]);
} }
} }
@ -2510,7 +2510,7 @@ pub fn decl_crate_map(sess: session::Session, mapmeta: LinkMeta,
let mut n_subcrates = 1; let mut n_subcrates = 1;
let cstore = sess.cstore; let cstore = sess.cstore;
while cstore.have_crate_data(n_subcrates) { n_subcrates += 1; } while cstore.have_crate_data(n_subcrates) { n_subcrates += 1; }
let is_top = !sess.building_library.get() || sess.gen_crate_map(); let is_top = !sess.building_library.get() || sess.opts.cg.gen_crate_map;
let sym_name = if is_top { let sym_name = if is_top {
~"_rust_crate_map_toplevel" ~"_rust_crate_map_toplevel"
} else { } else {

View file

@ -298,7 +298,7 @@ fn load_environment<'a>(bcx: &'a Block<'a>, cdata_ty: ty::t,
// Store the pointer to closure data in an alloca for debug info because that's what the // Store the pointer to closure data in an alloca for debug info because that's what the
// llvm.dbg.declare intrinsic expects // llvm.dbg.declare intrinsic expects
let env_pointer_alloca = if bcx.ccx().sess.opts.extra_debuginfo { let env_pointer_alloca = if bcx.ccx().sess.opts.debuginfo {
let alloc = alloc_ty(bcx, ty::mk_mut_ptr(bcx.tcx(), cdata_ty), "__debuginfo_env_ptr"); let alloc = alloc_ty(bcx, ty::mk_mut_ptr(bcx.tcx(), cdata_ty), "__debuginfo_env_ptr");
Store(bcx, llcdata, alloc); Store(bcx, llcdata, alloc);
Some(alloc) Some(alloc)

View file

@ -151,7 +151,7 @@ impl CrateContext {
let tn = TypeNames::new(); let tn = TypeNames::new();
let mut intrinsics = base::declare_intrinsics(llmod); let mut intrinsics = base::declare_intrinsics(llmod);
if sess.opts.extra_debuginfo { if sess.opts.debuginfo {
base::declare_dbg_intrinsics(llmod, &mut intrinsics); base::declare_dbg_intrinsics(llmod, &mut intrinsics);
} }
let int_type = Type::int(targ_cfg.arch); let int_type = Type::int(targ_cfg.arch);

View file

@ -56,7 +56,7 @@ pub fn trans_stmt<'a>(cx: &'a Block<'a>,
match d.node { match d.node {
ast::DeclLocal(ref local) => { ast::DeclLocal(ref local) => {
bcx = init_local(bcx, *local); bcx = init_local(bcx, *local);
if cx.sess().opts.extra_debuginfo { if cx.sess().opts.debuginfo {
debuginfo::create_local_var_metadata(bcx, *local); debuginfo::create_local_var_metadata(bcx, *local);
} }
} }

View file

@ -707,7 +707,7 @@ pub fn create_function_debug_context(cx: &CrateContext,
fn_decl: &ast::FnDecl, fn_decl: &ast::FnDecl,
param_substs: Option<@param_substs>, param_substs: Option<@param_substs>,
error_span: Span) -> DIArray { error_span: Span) -> DIArray {
if !cx.sess.opts.extra_debuginfo { if !cx.sess.opts.debuginfo {
return create_DIArray(DIB(cx), []); return create_DIArray(DIB(cx), []);
} }
@ -784,8 +784,8 @@ pub fn create_function_debug_context(cx: &CrateContext,
name_to_append_suffix_to.push_str(","); name_to_append_suffix_to.push_str(",");
} }
// Only create type information if extra_debuginfo is enabled // Only create type information if debuginfo is enabled
if cx.sess.opts.extra_debuginfo { if cx.sess.opts.debuginfo {
let actual_self_type_metadata = type_metadata(cx, let actual_self_type_metadata = type_metadata(cx,
actual_self_type, actual_self_type,
codemap::DUMMY_SP); codemap::DUMMY_SP);
@ -829,8 +829,8 @@ pub fn create_function_debug_context(cx: &CrateContext,
name_to_append_suffix_to.push_str(","); name_to_append_suffix_to.push_str(",");
} }
// Again, only create type information if extra_debuginfo is enabled // Again, only create type information if debuginfo is enabled
if cx.sess.opts.extra_debuginfo { if cx.sess.opts.debuginfo {
let actual_type_metadata = type_metadata(cx, actual_type, codemap::DUMMY_SP); let actual_type_metadata = type_metadata(cx, actual_type, codemap::DUMMY_SP);
let param_metadata_string = token::get_ident(ident.name); let param_metadata_string = token::get_ident(ident.name);
let param_metadata = param_metadata_string.get() let param_metadata = param_metadata_string.get()

View file

@ -105,8 +105,11 @@ fn runtest(test: &str, cratename: &str, libs: HashSet<Path>) {
maybe_sysroot: Some(@os::self_exe_path().unwrap().dir_path()), maybe_sysroot: Some(@os::self_exe_path().unwrap().dir_path()),
addl_lib_search_paths: @RefCell::new(libs), addl_lib_search_paths: @RefCell::new(libs),
crate_types: ~[session::CrateTypeExecutable], crate_types: ~[session::CrateTypeExecutable],
debugging_opts: session::PREFER_DYNAMIC,
output_types: ~[link::OutputTypeExe], output_types: ~[link::OutputTypeExe],
cg: session::CodegenOptions {
prefer_dynamic: true,
.. session::basic_codegen_options()
},
.. (*session::basic_options()).clone() .. (*session::basic_options()).clone()
}; };

View file

@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
// compile-flags: --linker=llllll // compile-flags: -C linker=llllll
// error-pattern: the linker `llllll` // error-pattern: the linker `llllll`
fn main() { fn main() {

View file

@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
// compile-flags: -Z lto -Z prefer-dynamic // compile-flags: -Z lto -C prefer-dynamic
// error-pattern: cannot prefer dynamic linking // error-pattern: cannot prefer dynamic linking

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run
// debugger:finish // debugger:finish

View file

@ -16,7 +16,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run
// debugger:finish // debugger:finish

View file

@ -13,7 +13,7 @@
// Gdb doesn't know about UTF-32 character encoding and will print a rust char as only // Gdb doesn't know about UTF-32 character encoding and will print a rust char as only
// its numerical value. // its numerical value.
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run
// debugger:finish // debugger:finish

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run
// debugger:finish // debugger:finish

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run
// debugger:finish // debugger:finish

View file

@ -15,7 +15,7 @@
// Gdb doesn't know about UTF-32 character encoding and will print a rust char as only // Gdb doesn't know about UTF-32 character encoding and will print a rust char as only
// its numerical value. // its numerical value.
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run
// debugger:finish // debugger:finish

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run
// debugger:finish // debugger:finish

View file

@ -12,7 +12,7 @@
#[feature(managed_boxes)]; #[feature(managed_boxes)];
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run
// debugger:finish // debugger:finish

View file

@ -13,7 +13,7 @@
// Gdb doesn't know about UTF-32 character encoding and will print a rust char as only // Gdb doesn't know about UTF-32 character encoding and will print a rust char as only
// its numerical value. // its numerical value.
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run
// debugger:finish // debugger:finish

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:set print pretty off // debugger:set print pretty off
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run
// debugger:finish // debugger:finish

View file

@ -12,7 +12,7 @@
#[feature(managed_boxes)]; #[feature(managed_boxes)];
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run
// debugger:finish // debugger:finish

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -12,7 +12,7 @@
#[feature(managed_boxes)]; #[feature(managed_boxes)];
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run
// debugger:finish // debugger:finish

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run
// debugger:finish // debugger:finish

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run
// debugger:finish // debugger:finish

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:set print pretty off // debugger:set print pretty off
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -17,7 +17,7 @@
// before the arguments have been properly loaded when setting the breakpoint via the function name. // before the arguments have been properly loaded when setting the breakpoint via the function name.
// Therefore the setup here sets them using line numbers (so be careful when changing this file). // Therefore the setup here sets them using line numbers (so be careful when changing this file).
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:set print pretty off // debugger:set print pretty off
// debugger:break function-arg-initialization.rs:139 // debugger:break function-arg-initialization.rs:139
// debugger:break function-arg-initialization.rs:154 // debugger:break function-arg-initialization.rs:154

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run
// debugger:finish // debugger:finish

View file

@ -16,7 +16,7 @@
// consequence, and as opposed to regular Rust functions, we can set the breakpoints via the // consequence, and as opposed to regular Rust functions, we can set the breakpoints via the
// function name (and don't have to fall back on using line numbers). // function name (and don't have to fall back on using line numbers).
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:set print pretty off // debugger:set print pretty off
// debugger:rbreak immediate_args // debugger:rbreak immediate_args
// debugger:rbreak binding // debugger:rbreak binding

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -11,7 +11,7 @@
// xfail-tidy-linelength // xfail-tidy-linelength
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:set print union on // debugger:set print union on
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -11,7 +11,7 @@
// xfail-tidy-linelength // xfail-tidy-linelength
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:set print union on // debugger:set print union on
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run
// debugger:finish // debugger:finish

View file

@ -19,7 +19,7 @@ fn main() {
// This test case checks whether compile unit names are set correctly, so that the correct default // This test case checks whether compile unit names are set correctly, so that the correct default
// source file can be found. // source file can be found.
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:list // debugger:list
// check:1[...]fn main() { // check:1[...]fn main() {
// check:2[...]let args : ~[~str] = ::std::os::args(); // check:2[...]let args : ~[~str] = ::std::os::args();

View file

@ -11,7 +11,7 @@
// xfail-win32 // xfail-win32
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -11,7 +11,7 @@
// xfail-win32 // xfail-win32
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -11,7 +11,7 @@
// xfail-win32 // xfail-win32
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z debug-info // compile-flags:-g
// debugger:run // debugger:run
// Nothing to do here really, just make sure it compiles. See issue #8513. // Nothing to do here really, just make sure it compiles. See issue #8513.

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -11,7 +11,7 @@
// xfail-win32 // xfail-win32
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run
// debugger:finish // debugger:finish

View file

@ -12,7 +12,7 @@
#[feature(managed_boxes)]; #[feature(managed_boxes)];
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run
// debugger:finish // debugger:finish

View file

@ -12,7 +12,7 @@
#[feature(managed_boxes)]; #[feature(managed_boxes)];
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:set print pretty off // debugger:set print pretty off
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run
// debugger:finish // debugger:finish

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run
// debugger:finish // debugger:finish

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run
// debugger:finish // debugger:finish

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run
// debugger:finish // debugger:finish

View file

@ -11,7 +11,7 @@
// xfail-tidy-linelength // xfail-tidy-linelength
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:set print pretty off // debugger:set print pretty off
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -11,7 +11,7 @@
// xfail-tidy-linelength // xfail-tidy-linelength
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:set print pretty off // debugger:set print pretty off
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:run // debugger:run
// Test whether compiling a recursive enum definition crashes debug info generation. The test case // Test whether compiling a recursive enum definition crashes debug info generation. The test case

View file

@ -12,7 +12,7 @@
#[feature(managed_boxes)]; #[feature(managed_boxes)];
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:set print pretty off // debugger:set print pretty off
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:set print pretty off // debugger:set print pretty off
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:set print pretty off // debugger:set print pretty off
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -11,7 +11,7 @@
// xfail-tidy-linelength // xfail-tidy-linelength
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:set print union on // debugger:set print union on
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:set print pretty off // debugger:set print pretty off
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -11,7 +11,7 @@
// xfail-tidy-linelength // xfail-tidy-linelength
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:set print union on // debugger:set print union on
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run
// debugger:finish // debugger:finish

View file

@ -10,7 +10,7 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:run // debugger:run
#[allow(unused_variable)]; #[allow(unused_variable)];

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:set print pretty off // debugger:set print pretty off
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:set print pretty off // debugger:set print pretty off
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:set print pretty off // debugger:set print pretty off
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -11,7 +11,7 @@
// xfail-tidy-linelength // xfail-tidy-linelength
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:set print union on // debugger:set print union on
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run

View file

@ -10,7 +10,7 @@
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run
// debugger:finish // debugger:finish

View file

@ -11,7 +11,7 @@
// xfail-win32: FIXME #10474 // xfail-win32: FIXME #10474
// xfail-android: FIXME(#10381) // xfail-android: FIXME(#10381)
// compile-flags:-Z extra-debug-info // compile-flags:-g
// debugger:rbreak zzz // debugger:rbreak zzz
// debugger:run // debugger:run
// debugger:finish // debugger:finish

Some files were not shown because too many files have changed in this diff Show more