Fuzzer: update lists of known bugs
This commit is contained in:
parent
7182054416
commit
8e1902f30f
1 changed files with 25 additions and 56 deletions
|
@ -51,17 +51,13 @@ fn find_rust_files(files: &mutable [str], path: &str) {
|
||||||
fn safe_to_steal(e: ast::expr_) -> bool {
|
fn safe_to_steal(e: ast::expr_) -> bool {
|
||||||
alt e {
|
alt e {
|
||||||
|
|
||||||
|
// https://github.com/graydon/rust/issues/890
|
||||||
// pretty-printer precedence issues -- https://github.com/graydon/rust/issues/670
|
|
||||||
ast::expr_unary(_, _) {
|
|
||||||
false
|
|
||||||
}
|
|
||||||
ast::expr_lit(lit) {
|
ast::expr_lit(lit) {
|
||||||
alt lit.node {
|
alt lit.node {
|
||||||
ast::lit_str(_) { true }
|
ast::lit_str(_) { true }
|
||||||
ast::lit_char(_) { true }
|
ast::lit_char(_) { true }
|
||||||
ast::lit_int(_) { false }
|
ast::lit_int(_) { false }
|
||||||
ast::lit_uint(_) { false }
|
ast::lit_uint(_) { true }
|
||||||
ast::lit_mach_int(_, _) { false }
|
ast::lit_mach_int(_, _) { false }
|
||||||
ast::lit_float(_) { false }
|
ast::lit_float(_) { false }
|
||||||
ast::lit_mach_float(_, _) { false }
|
ast::lit_mach_float(_, _) { false }
|
||||||
|
@ -69,31 +65,27 @@ fn safe_to_steal(e: ast::expr_) -> bool {
|
||||||
ast::lit_bool(_) { true }
|
ast::lit_bool(_) { true }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://github.com/graydon/rust/issues/890
|
||||||
ast::expr_cast(_, _) { false }
|
ast::expr_cast(_, _) { false }
|
||||||
ast::expr_assert(_) { false }
|
ast::expr_assert(_) { false }
|
||||||
ast::expr_binary(_, _, _) { false }
|
ast::expr_binary(_, _, _) { false }
|
||||||
ast::expr_assign(_, _) { false }
|
ast::expr_assign(_, _) { false }
|
||||||
ast::expr_assign_op(_, _, _) { false }
|
ast::expr_assign_op(_, _, _) { false }
|
||||||
ast::expr_fail(option::none.) {
|
|
||||||
false
|
|
||||||
/* https://github.com/graydon/rust/issues/764 */
|
|
||||||
|
|
||||||
}
|
// https://github.com/graydon/rust/issues/764
|
||||||
|
ast::expr_fail(option::none.) { false }
|
||||||
ast::expr_ret(option::none.) { false }
|
ast::expr_ret(option::none.) { false }
|
||||||
ast::expr_put(option::none.) { false }
|
ast::expr_put(option::none.) { false }
|
||||||
|
|
||||||
|
// These prefix-operator keywords are not being parenthesized when in callee positions.
|
||||||
|
// https://github.com/graydon/rust/issues/891
|
||||||
|
ast::expr_ret(_) { false }
|
||||||
|
ast::expr_put(_) { false }
|
||||||
|
ast::expr_check(_, _) { false }
|
||||||
|
ast::expr_log(_, _) { false }
|
||||||
|
|
||||||
ast::expr_ret(_) {
|
_ { true }
|
||||||
false
|
|
||||||
/* lots of code generation issues, such as https://github.com/graydon/rust/issues/770 */
|
|
||||||
|
|
||||||
}
|
|
||||||
ast::expr_fail(_) { false }
|
|
||||||
|
|
||||||
|
|
||||||
_ {
|
|
||||||
true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -173,9 +165,7 @@ fn check_variants_of_ast(crate: &ast::crate, codemap: &codemap::codemap,
|
||||||
filename,
|
filename,
|
||||||
io::string_reader(""), _,
|
io::string_reader(""), _,
|
||||||
pprust::no_ann()));
|
pprust::no_ann()));
|
||||||
// 1u would be sane here, but the pretty-printer currently has lots of whitespace and paren issues,
|
check_roundtrip_convergence(str3, 1u);
|
||||||
// and https://github.com/graydon/rust/issues/766 is hilarious.
|
|
||||||
check_roundtrip_convergence(str3, 7u);
|
|
||||||
//check_whole_compiler(str3);
|
//check_whole_compiler(str3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -225,49 +215,28 @@ fn parse_and_print(code: &str) -> str {
|
||||||
|
|
||||||
fn content_is_dangerous_to_modify(code: &str) -> bool {
|
fn content_is_dangerous_to_modify(code: &str) -> bool {
|
||||||
let dangerous_patterns =
|
let dangerous_patterns =
|
||||||
["obj", // not safe to steal; https://github.com/graydon/rust/issues/761
|
["#macro", // not safe to steal things inside of it, because they have a special syntax
|
||||||
"#macro", // not safe to steal things inside of it, because they have a special syntax
|
"#", // strange representation of the arguments to #fmt, for example
|
||||||
"#", // strange representation of the arguments to #fmt, for example
|
" be "]; // don't want to replace its child with a non-call: "Non-call expression in tail call"
|
||||||
" be ", // don't want to replace its child with a non-call: "Non-call expression in tail call"
|
|
||||||
"@"]; // hangs when compiling: https://github.com/graydon/rust/issues/768
|
|
||||||
|
|
||||||
for p: str in dangerous_patterns { if contains(code, p) { ret true; } }
|
for p: str in dangerous_patterns { if contains(code, p) { ret true; } }
|
||||||
ret false;
|
ret false;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn content_is_confusing(code: &str) ->
|
fn content_is_confusing(code: &str) -> bool {
|
||||||
bool { // https://github.com/graydon/rust/issues/671
|
|
||||||
// https://github.com/graydon/rust/issues/669
|
|
||||||
// https://github.com/graydon/rust/issues/669
|
|
||||||
// https://github.com/graydon/rust/issues/669
|
|
||||||
// crazy rules enforced by parser rather than typechecker?
|
|
||||||
// more precedence issues
|
|
||||||
// more precedence issues?
|
|
||||||
|
|
||||||
let confusing_patterns =
|
let confusing_patterns =
|
||||||
["#macro", "][]", "][mutable]", "][mutable ]", "self", "spawn",
|
["self", // crazy rules enforced by parser rather than typechecker?
|
||||||
"bind", "\n\n\n\n\n", // https://github.com/graydon/rust/issues/759
|
"spawn", // precedence issues?
|
||||||
" : ", // https://github.com/graydon/rust/issues/760
|
"bind", // precedence issues?
|
||||||
"if ret", "alt ret", "if fail", "alt fail"];
|
"\n\n\n\n\n" // https://github.com/graydon/rust/issues/850
|
||||||
|
];
|
||||||
|
|
||||||
for p: str in confusing_patterns { if contains(code, p) { ret true; } }
|
for p: str in confusing_patterns { if contains(code, p) { ret true; } }
|
||||||
ret false;
|
ret false;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn file_is_confusing(filename: &str) -> bool {
|
fn file_is_confusing(filename: &str) -> bool {
|
||||||
|
let confusing_files = [];
|
||||||
// https://github.com/graydon/rust/issues/674
|
|
||||||
|
|
||||||
// something to do with () as a lone pattern
|
|
||||||
|
|
||||||
// an issue where -2147483648 gains an
|
|
||||||
// extra negative sign each time through,
|
|
||||||
// which i can't reproduce using "rustc
|
|
||||||
// --pretty normal"???
|
|
||||||
let confusing_files =
|
|
||||||
["block-expr-precedence.rs", "nil-pattern.rs",
|
|
||||||
"syntax-extension-fmt.rs",
|
|
||||||
"newtype.rs"]; // modifying it hits something like https://github.com/graydon/rust/issues/670
|
|
||||||
|
|
||||||
for f in confusing_files { if contains(filename, f) { ret true; } }
|
for f in confusing_files { if contains(filename, f) { ret true; } }
|
||||||
|
|
||||||
|
@ -308,7 +277,7 @@ fn check_convergence(files: &[str]) {
|
||||||
let s = io::read_whole_file_str(file);
|
let s = io::read_whole_file_str(file);
|
||||||
if !content_is_confusing(s) {
|
if !content_is_confusing(s) {
|
||||||
log_err #fmt["pp converge: %s", file];
|
log_err #fmt["pp converge: %s", file];
|
||||||
// Change from 7u to 2u when https://github.com/graydon/rust/issues/759 is fixed
|
// Change from 7u to 2u once https://github.com/graydon/rust/issues/850 is fixed
|
||||||
check_roundtrip_convergence(s, 7u);
|
check_roundtrip_convergence(s, 7u);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue