Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

make panictry! private to libsyntax #56897

Merged
merged 1 commit into from
Jan 4, 2019
Merged

Conversation

euclio
Copy link
Contributor

@euclio euclio commented Dec 16, 2018

This commit completely removes usage of the panictry! macro from
outside libsyntax. The macro causes parse errors to be fatal, so using
it in libsyntax_ext caused parse failures within a syntax extension to
be fatal, which is probably not intended.

Furthermore, this commit adds spans to diagnostics emitted by empty
extensions if they were missing, à la #56491.

@rust-highfive
Copy link
Collaborator

r? @nikomatsakis

(rust_highfive has picked a reviewer for you, use r? to override)

@rust-highfive rust-highfive added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Dec 16, 2018
@rust-highfive
Copy link
Collaborator

The job x86_64-gnu-llvm-5.0 of your PR failed on Travis (raw log). Through arcane magic we have determined that the following fragments from the build log may contain information about the problem.

Click to expand the log.
travis_time:end:031699f4:start=1545001132271443988,finish=1545001133361084262,duration=1089640274
$ git checkout -qf FETCH_HEAD
travis_fold:end:git.checkout

Encrypted environment variables have been removed for security reasons.
See https://docs.travis-ci.com/user/pull-requests/#pull-requests-and-security-restrictions
$ export SCCACHE_BUCKET=rust-lang-ci-sccache2
$ export SCCACHE_REGION=us-west-1
Setting environment variables from .travis.yml
$ export IMAGE=x86_64-gnu-llvm-5.0
---
travis_time:start:test_codegen
Check compiletest suite=codegen mode=codegen (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
[00:54:58] 
[00:54:58] running 121 tests
[00:55:01] i..ii...iii..iiii.....i...i..........i..iii.............i.....i......ii...i..i.ii..............i...i 100/121
[00:55:01] i..ii.i.....iiii.....
[00:55:01] 
[00:55:01]  finished in 3.561
[00:55:01] travis_fold:end:test_codegen

---
travis_time:start:test_debuginfo
Check compiletest suite=debuginfo mode=debuginfo-both (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
[00:55:17] 
[00:55:17] running 119 tests
[00:55:42] .iiiii...i.....i..i...i..i.i..i.ii..i.....i..i....i..........iiii.........i.i...ii...i.......ii.i.i. 100/119
[00:55:47] i......iii.i.....ii
[00:55:47] 
[00:55:47]  finished in 29.740
[00:55:47] travis_fold:end:test_debuginfo

---
[01:27:26] 
[01:27:26] 12 3 | no
[01:27:26] 13   | ^^ not found in this scope
[01:27:26] 14 
[01:27:26] - thread '$DIR/failed-doctest-output.rs - OtherStruct (line 27)' panicked at 'couldn't compile the test', src/librustdoc/test.rs:326:13
[01:27:26] + thread '$DIR/failed-doctest-output.rs - OtherStruct (line 27)' panicked at 'couldn't compile the test', src/librustdoc/test.rs:331:13
[01:27:26] 17 
[01:27:26] 17 
[01:27:26] 18 ---- $DIR/failed-doctest-output.rs - SomeStruct (line 21) stdout ----
[01:27:26] 
[01:27:26] 21 thread 'main' panicked at 'oh no', $DIR/failed-doctest-output.rs:3:1
[01:27:26] 23 
[01:27:26] - ', src/librustdoc/test.rs:361:17
[01:27:26] + ', src/librustdoc/test.rs:366:17
[01:27:26] 25 
[01:27:26] 25 
[01:27:26] 26 
[01:27:26] 27 failures:
[01:27:26] 
[01:27:26] 
[01:27:26] The actual stdout differed from the expected stdout.
[01:27:26] Actual stdout saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/rustdoc-ui/failed-doctest-output/failed-doctest-output.stdout
[01:27:26] To update references, rerun the tests and pass the `--bless` flag
3328908 ./obj
3313596 ./obj/build
2473504 ./obj/build/x86_64-unknown-linux-gnu
1119404 ./src
---
182824 ./obj/build/x86_64-unknown-linux-gnu/test/ui
153280 ./src/tools/clang
148664 ./obj/build/x86_64-unknown-linux-gnu/stage1-rustc
144288 ./obj/build/bootstrap/debug/incremental/bootstrap-2x7szixskz2uj
144284 ./obj/build/bootstrap/debug/incremental/bootstrap-2x7szixskz2uj/s-f7nnrvz83k-1ewg3cw-3qov0d07xkydp
140204 ./obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu
140200 ./obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release
133684 ./obj/build/x86_64-unknown-linux-gnu/stage1-rus

I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact @TimNN. (Feature Requests)

Copy link
Contributor

@nikomatsakis nikomatsakis left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm a bit confused by the motivation here. If we hand-expand the macro, then is this really changing anything? Or are we expanding uses of the macro to something different than before?

@euclio
Copy link
Contributor Author

euclio commented Dec 17, 2018

The only hand-expanding is in rustdoc, where I think we do still want fatal errors. Uses in libsyntax_ext are replaced by ? and do not raise fatal errors anymore, which is different behavior. For example, running existing rustc on the test files added by this PR will bail on the first error encountered instead of printing all of them.

@bors
Copy link
Contributor

bors commented Dec 19, 2018

☔ The latest upstream changes (presumably #56977) made this pull request unmergeable. Please resolve the merge conflicts.

Copy link
Contributor

@nikomatsakis nikomatsakis left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Very nice PR. I left some comments and suggested changes. Thoughts?

I might want to shift review off to @estebank or @petrochenkov though as they work more often in the parser.

None => return DummyResult::expr(sp),
};

if p2.token == token::Eof {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why are we handling EOF specially here compared to how we did it before? Is this to preserve the error message?

(if so, it seems a bit unfortunate that we have to duplicate the error here)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There isn't a span associated with the EOF error, so the diagnostics are very poor unless we specifically check for it. See #55547 for an example..

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK, seems like a problem, but an orthogonal one.

// so ensure that it is volatile
if outputs.is_empty() {
volatile = true;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

where did this logic (about volatile = true) go to?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's in the main expansion function now.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK.

@@ -23,33 +25,18 @@ pub fn expand_assert<'cx>(
sp: Span,
tts: &[TokenTree],
) -> Box<dyn MacResult + 'cx> {
let mut parser = cx.new_parser_from_tts(tts);

if parser.token == token::Eof {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess we have some similar code duplication here already, though.

@@ -25,16 +27,39 @@ pub fn expand_cfg<'cx>(cx: &mut ExtCtxt,
tts: &[tokenstream::TokenTree])
-> Box<dyn base::MacResult + 'static> {
let sp = sp.apply_mark(cx.current_expansion.mark);

match parse_cfg(cx, sp, tts) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps we should use try here instead of creating a new function?

This could be

let result = try { /* old code */ };

Some(ts)
} else {
None
let Assert { cond_expr, custom_message } = match parse_assert(cx, sp, tts) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps we should use try here instead of creating a new function?

This could be

let result = try { /* old code */ };

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could, but doesn't this require migrating to the new edition?

Also, I personally prefer the separation of the parsing logic and the expansion logic.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems fine. We can leave it like this. I agree separating the parsing/expansion logic makes sense.

@@ -42,24 +44,47 @@ pub fn expand_global_asm<'cx>(cx: &'cx mut ExtCtxt,
return DummyResult::any(sp);
}

match parse_global_asm(cx, sp, tts) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

similarly try may be useful here

@nikomatsakis nikomatsakis added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Dec 19, 2018
@nikomatsakis
Copy link
Contributor

r=me but this does need a rebase. That said, I'd prefer if @estebank could at least take a quick look.

r? @estebank

@euclio
Copy link
Contributor Author

euclio commented Dec 27, 2018

@estebank Rebased.

@rust-highfive

This comment has been minimized.

@kennytm kennytm added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Dec 27, 2018
Copy link
Contributor

@estebank estebank left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One nitpick inline, beyond that r=me.

}

let fmtstr = panictry!(p.parse_expr());
let fmtstr = p.parse_expr()?;
let mut named = false;

while p.token != token::Eof {
if !p.eat(&token::Comma) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't this be p.expect(&token::Comma)??

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm, looks like that regresses diagnostics:

diff --git a/src/test/ui/codemap_tests/bad-format-args.stderr b/src/test/ui/codemap_tests/bad-format-args.stderr
index 38320416b4..46deb9d4b0 100644
--- a/src/test/ui/codemap_tests/bad-format-args.stderr
+++ b/src/test/ui/codemap_tests/bad-format-args.stderr
@@ -6,17 +6,17 @@ LL |     format!(); //~ ERROR requires at least a format string argument
    |
    = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)

-error: expected token: `,`
+error: expected one of `,`, `.`, `?`, or an operator, found `1`
   --> $DIR/bad-format-args.rs:3:16
    |
 LL |     format!("" 1); //~ ERROR expected token: `,`
-   |                ^
+   |                ^ expected one of `,`, `.`, `?`, or an operator here

-error: expected token: `,`
+error: expected one of `,`, `.`, `?`, or an operator, found `1`
   --> $DIR/bad-format-args.rs:4:19
    |
 LL |     format!("", 1 1); //~ ERROR expected token: `,`
-   |                   ^
+   |                   ^ expected one of `,`, `.`, `?`, or an operator here

 error: aborting due to 3 previous errors

diff --git a/src/test/ui/macros/missing-comma.stderr b/src/test/ui/macros/missing-comma.stderr
index 5881e0b7b6..024c0bfada 100644
--- a/src/test/ui/macros/missing-comma.stderr
+++ b/src/test/ui/macros/missing-comma.stderr
@@ -1,8 +1,8 @@
-error: expected token: `,`
+error: expected one of `,`, `.`, `?`, or an operator, found `a`
   --> $DIR/missing-comma.rs:10:19
    |
 LL |     println!("{}" a);
-   |                   ^
+   |                   ^ expected one of `,`, `.`, `?`, or an operator here

 error: no rules expected the token `b`
   --> $DIR/missing-comma.rs:12:12

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Doesn't seem clear to me that these are regressions. Changes, sure, more verbose, true, but not necessarily a regression. Arguably that is the right output: it's not only a comma that is expected there (although it is missing the closing brace).

Lets merge this PR as is and we can get back to this in the future.

Copy link
Contributor Author

@euclio euclio Dec 31, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But out of those tokens, only the comma is valid at that position in the syntax extension, right? So isn't including the other expected tokens misleading?

Copy link
Contributor

@estebank estebank Dec 31, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

println!("{} {}", a.foo, b?); is valid code, so for the second case above the change is valid, while the other two are not necessarily an improvement... Let's leave as is for now.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, I see. I was only looking at the case after the string literal.

@estebank
Copy link
Contributor

@bors r+

@bors
Copy link
Contributor

bors commented Dec 31, 2018

📌 Commit 39404c1d18bd309de7023c9fc11e1ca0ed342a8a has been approved by estebank

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Dec 31, 2018
@bors
Copy link
Contributor

bors commented Dec 31, 2018

⌛ Testing commit 39404c1d18bd309de7023c9fc11e1ca0ed342a8a with merge 4d30868eb2341aee8d561ddfcdc54822d7be0066...

@bors
Copy link
Contributor

bors commented Dec 31, 2018

💔 Test failed - status-travis

@bors bors removed the S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. label Dec 31, 2018
@bors bors added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Dec 31, 2018
@rust-highfive
Copy link
Collaborator

The job dist-x86_64-musl of your PR failed on Travis (raw log). Through arcane magic we have determined that the following fragments from the build log may contain information about the problem.

Click to expand the log.
[00:51:04] 
[00:51:04] ---- [ui] ui/issues/issue-22644.rs stdout ----
[00:51:04] diff of stderr:
[00:51:04] 
[00:51:04] 89 LL |     println!("{}", a: &mut 4); //~ ERROR expected type, found `4`
[00:51:04] 90    |                            ^ expecting a type here because of type ascription
[00:51:04] - error: aborting due to 9 previous errors
[00:51:04] - error: aborting due to 9 previous errors
[00:51:04] + error[E0658]: type ascription is experimental (see issue #23416)
[00:51:04] +   --> $DIR/issue-22644.rs:10:20
[00:51:04] +    |
[00:51:04] + LL |     println!("{}", a: usize > long_name);
[00:51:04] +    |
[00:51:04] +    = help: add #![feature(type_ascription)] to the crate attributes to enable
[00:51:04] 93 
[00:51:04] 93 
[00:51:04] + error[E0658]: type ascription is experimental (see issue #23416)
[00:51:04] +   --> $DIR/issue-22644.rs:11:22
[00:51:04] +    |
[00:51:04] + LL |     println!("{}{}", a: usize < long_name, long_name);
[00:51:04] +    |
[00:51:04] +    = help: add #![feature(type_ascription)] to the crate attributes to enable
[00:51:04] + 
[00:51:04] + 
[00:51:04] + error[E0658]: type ascription is experimental (see issue #23416)
[00:51:04] +   --> $DIR/issue-22644.rs:13:20
[00:51:04] +    |
[00:51:04] + LL |     println!("{}", a: usize < 4); //~ ERROR `<` is interpreted as a start of generic
[00:51:04] +    |
[00:51:04] +    = help: add #![feature(type_ascription)] to the crate attributes to enable
[00:51:04] + 
[00:51:04] + error: aborting due to 12 previous errors
[00:51:04] + error: aborting due to 12 previous errors
[00:51:04] + 
[00:51:04] + For more information about this error, try `rustc --explain E0658`.
[00:51:04] 94 
[00:51:04] 
[00:51:04] 
[00:51:04] The actual stderr differed from the expected stderr.
[00:51:04] Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/issues/issue-22644/issue-22644.stderr
[00:51:04] To update references, rerun the tests and pass the `--bless` flag
[00:51:04] To only update this specific test, also pass `--test-args issues/issue-22644.rs`
[00:51:04] error: 1 errors occurred comparing output.
[00:51:04] status: exit code: 1
[00:51:04] status: exit code: 1
[00:51:04] command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/issues/issue-22644.rs" "--target=x86_64-unknown-linux-musl" "--error-format" "json" "-Zui-testing" "-C" "prefer-dynamic" "-o" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/issues/issue-22644/a" "-Crpath" "-O" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-musl/native/rust-test-helpers" "-Clinker=/musl-x86_64/bin/musl-gcc" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/issues/issue-22644/auxiliary" "-A" "unused"
[00:51:04] ------------------------------------------
[00:51:04] 
[00:51:04] ------------------------------------------
[00:51:04] stderr:
[00:51:04] stderr:
[00:51:04] ------------------------------------------
[00:51:04] {"message":"`<` is interpreted as a start of generic arguments for `usize`, not a comparison","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/issues/issue-22644.rs","byte_start":141,"byte_end":150,"line_start":6,"line_end":6,"column_start":33,"column_end":42,"is_primary":false,"text":[{"text":"    println!(\"{}\", a as usize < long_name); //~ ERROR `<` is interpreted as a start of generic","highlight_start":33,"highlight_end":42}],"label":"interpreted as generic arguments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"/checkout/src/test/ui/issues/issue-22644.rs","byte_start":139,"byte_end":140,"line_start":6,"line_end":6,"column_start":31,"column_end":32,"is_primary":true,"text":[{"text":"    println!(\"{}\", a as usize < long_name); //~ ERROR `<` is interpreted as a start of generic","highlight_start":31,"highlight_end":32}],"label":"not interpreted as comparison","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"try comparing the cast value","code":null,"level":"help","spans":[{"file_name":"/checkout/src/test/ui/issues/issue-22644.rs","byte_start":128,"byte_end":138,"line_start":6,"line_end":6,"column_start":20,"column_end":30,"is_primary":true,"text":[{"text":"    println!(\"{}\", a as usize < long_name); //~ ERROR `<` is interpreted as a start of generic","highlight_start":20,"highlight_end":30}],"label":null,"suggested_replacement":"(a as usize)","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"error: `<` is interpreted as a start of generic arguments for `usize`, not a comparison\n  --> /checkout/src/test/ui/issues/issue-22644.rs:6:31\n   |\nLL |     println!(\"{}\", a as usize < long_name); //~ ERROR `<` is interpreted as a start of generic\n   |                    ---------- ^ --------- interpreted as generic arguments\n   |                    |          |\n   |                    |          not interpreted as comparison\n   |                    help: try comparing the cast value: `(a as usize)`\n\n"}
[00:51:04] {"message":"`<` is interpreted as a start of generic arguments for `usize`, not a comparison","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/issues/issue-22644.rs","byte_start":238,"byte_end":258,"line_start":7,"line_end":7,"column_start":35,"column_end":55,"is_primary":false,"text":[{"text":"    println!(\"{}{}\", a as usize < long_name, long_name);","highlight_start":35,"highlight_end":55}],"label":"interpreted as generic arguments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"/checkout/src/test/ui/issues/issue-22644.rs","byte_start":236,"byte_end":237,"line_start":7,"line_end":7,"column_start":33,"column_end":34,"is_primary":true,"text":[{"text":"    println!(\"{}{}\", a as usize < long_name, long_name);","highlight_start":33,"highlight_end":34}],"label":"not interpreted as comparison","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"try comparing the cast value","code":null,"level":"help","spans":[{"file_name":"/checkout/src/test/ui/issues/issue-22644.rs","byte_start":225,"byte_end":235,"line_start":7,"line_end":7,"column_start":22,"column_end":32,"is_primary":true,"text":[{"text":"    println!(\"{}{}\", a as usize < long_name, long_name);","highlight_start":22,"highlight_end":32}],"label":null,"suggested_replacement":"(a as usize)","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"error: `<` is interpreted as a start of generic arguments for `usize`, not a comparison\n  --> /checkout/src/test/ui/issues/issue-22644.rs:7:33\n   |\nLL |     println!(\"{}{}\", a as usize < long_name, long_name);\n   |                      ---------- ^ -------------------- interpreted as generic arguments\n   |                      |          |\n   |                      |          not interpreted as comparison\n   |                      help: try comparing the cast value: `(a as usize)`\n\n"}
[00:51:04] {"message":"`<` is interpreted as a start of generic arguments for `usize`, not a comparison","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/issues/issue-22644.rs","byte_start":349,"byte_end":350,"line_start":9,"line_end":9,"column_start":33,"column_end":34,"is_primary":false,"text":[{"text":"    println!(\"{}\", a as usize < 4); //~ ERROR `<` is interpreted as a start of generic","highlight_start":33,"highlight_end":34}],"label":"interpreted as generic arguments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"/checkout/src/test/ui/issues/issue-22644.rs","byte_start":347,"byte_end":348,"line_start":9,"line_end":9,"column_start":31,"column_end":32,"is_primary":true,"text":[{"text":"    println!(\"{}\", a as usize < 4); //~ ERROR `<` is interpreted as a start of generic","highlight_start":31,"highlight_end":32}],"label":"not interpreted as comparison","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"try comparing the cast value","code":null,"level":"help","spans":[{"file_name":"/checkout/src/test/ui/issues/issue-22644.rs","byte_start":336,"byte_end":346,"line_start":9,"line_end":9,"column_start":20,"column_end":30,"is_primary":true,"text":[{"text":"    println!(\"{}\", a as usize < 4); //~ ERROR `<` is interpreted as a start of generic","highlight_start":20,"highlight_end":30}],"label":null,"suggested_replacement":"(a as usize)","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"error: `<` is interpreted as a start of generic arguments for `usize`, not a comparison\n  --> /checkout/src/test/ui/issues/issue-22644.rs:9:31\n   |\nLL |     println!(\"{}\", a as usize < 4); //~ ERROR `<` is interpreted as a start of generic\n   |                    ---------- ^ - interpreted as generic arguments\n   |                    |          |\n   |                    |          not interpreted as comparison\n   |                    help: try comparing the cast value: `(a as usize)`\n\n"}
[00:51:04] {"message":"`<` is interpreted as a start of generic arguments for `usize`, not a comparison","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/issues/issue-22644.rs","byte_start":478,"byte_end":498,"line_start":11,"line_end":11,"column_start":33,"column_end":53,"is_primary":false,"text":[{"text":"    println!(\"{}{}\", a: usize < long_name, long_name);","highlight_start":33,"highlight_end":53}],"label":"interpreted as generic arguments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"/checkout/src/test/ui/issues/issue-22644.rs","byte_start":476,"byte_end":477,"line_start":11,"line_end":11,"column_start":31,"column_end":32,"is_primary":true,"text":[{"text":"    println!(\"{}{}\", a: usize < long_name, long_name);","highlight_start":31,"highlight_end":32}],"label":"not interpreted as comparison","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"try comparing the cast value","code":null,"level":"help","spans":[{"file_name":"/checkout/src/test/ui/issues/issue-22644.rs","byte_start":467,"byte_end":475,"line_start":11,"line_end":11,"column_start":22,"column_end":30,"is_primary":true,"text":[{"text":"    println!(\"{}{}\", a: usize < long_name, long_name);","highlight_start":22,"highlight_end":30}],"label":null,"suggested_replacement":"(a: usize)","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"error: `<` is interpreted as a start of generic arguments for `usize`, not a comparison\n  --> /checkout/src/test/ui/issues/issue-22644.rs:11:31\n   |\nLL |     println!(\"{}{}\", a: usize < long_name, long_name);\n   |                      -------- ^ -------------------- interpreted as generic arguments\n   |                      |        |\n   |                      |        not interpreted as comparison\n   |                      help: try comparing the cast value: `(a: usize)`\n\n"}
[00:51:04] {"message":"`<` is interpreted as a start of generic arguments for `usize`, not a comparison","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/issues/issue-22644.rs","byte_start":587,"byte_end":588,"line_start":13,"line_end":13,"column_start":31,"column_end":32,"is_primary":false,"text":[{"text":"    println!(\"{}\", a: usize < 4); //~ ERROR `<` is interpreted as a start of generic","highlight_start":31,"highlight_end":32}],"label":"interpreted as generic arguments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"/checkout/src/test/ui/issues/issue-22644.rs","byte_start":585,"byte_end":586,"line_start":13,"line_end":13,"column_start":29,"column_end":30,"is_primary":true,"text":[{"text":"    println!(\"{}\", a: usize < 4); //~ ERROR `<` is interpreted as a start of generic","highlight_start":29,"highlight_end":30}],"label":"not interpreted as comparison","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"try comparing the cast value","code":null,"level":"help","spans":[{"file_name":"/checkout/src/test/ui/issues/issue-22644.rs","byte_start":576,"byte_end":584,"line_start":13,"line_end":13,"column_start":20,"column_end":28,"is_primary":true,"text":[{"text":"    println!(\"{}\", a: usize < 4); //~ ERROR `<` is interpreted as a start of generic","highlight_start":20,"highlight_end":28}],"label":null,"suggested_replacement":"(a: usize)","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"error: `<` is interpreted as a start of generic arguments for `usize`, not a comparison\n  --> /checkout/src/test/ui/issues/issue-22644.rs:13:29\n   |\nLL |     println!(\"{}\", a: usize < 4); //~ ERROR `<` is interpreted as a start of generic\n   |                    -------- ^ - interpreted as generic arguments\n   |                    |        |\n   |                    |        not interpreted as comparison\n   |                    help: try comparing the cast value: `(a: usize)`\n\n"}
[00:51:04] {"message":"`<` is interpreted as a start of generic arguments for `usize`, not a comparison","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/issues/issue-22644.rs","byte_start":802,"byte_end":803,"line_start":19,"line_end":19,"column_start":20,"column_end":21,"is_primary":false,"text":[{"text":"                   4);","highlight_start":20,"highlight_end":21}],"label":"interpreted as generic arguments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"/checkout/src/test/ui/issues/issue-22644.rs","byte_start":730,"byte_end":731,"line_start":18,"line_end":18,"column_start":20,"column_end":21,"is_primary":true,"text":[{"text":"                   < //~ ERROR `<` is interpreted as a start of generic","highlight_start":20,"highlight_end":21}],"label":"not interpreted as comparison","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"try comparing the cast value","code":null,"level":"help","spans":[{"file_name":"/checkout/src/test/ui/issues/issue-22644.rs","byte_start":662,"byte_end":710,"line_start":15,"line_end":17,"column_start":20,"column_end":25,"is_primary":true,"text":[{"text":"    println!(\"{}\", a","highlight_start":20,"highlight_end":21},{"text":"                   as","highlight_start":1,"highlight_end":22},{"text":"                   usize","highlight_start":1,"highlight_end":25}],"label":null,"suggested_replacement":"(a\n                   as\n                   usize)","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"error: `<` is interpreted as a start of generic arguments for `usize`, not a comparison\n  --> /checkout/src/test/ui/issues/issue-22644.rs:18:20\n   |\nLL |                    < //~ ERROR `<` is interpreted as a start of generic\n   |                    ^ not interpreted as comparison\nLL |                    4);\n   |                    - interpreted as generic arguments\nhelp: try comparing the cast value\n   |\nLL |     println!(\"{}\", (a\nLL |                    as\nLL |                    usize)\n   |\n\n"}
[00:51:04] {"message":"`<` is interpreted as a start of generic arguments for `usize`, not a comparison","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/issues/issue-22644.rs","byte_start":969,"byte_end":970,"line_start":28,"line_end":28,"column_start":20,"column_end":21,"is_primary":false,"text":[{"text":"                   5);","highlight_start":20,"highlight_end":21}],"label":"interpreted as generic arguments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"/checkout/src/test/ui/issues/issue-22644.rs","byte_start":897,"byte_end":898,"line_start":27,"line_end":27,"column_start":20,"column_end":21,"is_primary":true,"text":[{"text":"                   < //~ ERROR `<` is interpreted as a start of generic","highlight_start":20,"highlight_end":21}],"label":"not interpreted as comparison","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"try comparing the cast value","code":null,"level":"help","spans":[{"file_name":"/checkout/src/test/ui/issues/issue-22644.rs","byte_start":825,"byte_end":877,"line_start":20,"line_end":26,"column_start":20,"column_end":25,"is_primary":true,"text":[{"text":"    println!(\"{}\", a","highlight_start":20,"highlight_end":21},{"text":"","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"                   as","highlight_start":1,"highlight_end":22},{"text":"","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"                   usize","highlight_start":1,"highlight_end":25}],"label":null,"suggested_replacement":"(a\n\n\n                   as\n\n\n                   usize)","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"error: `<` is interpreted as a start of generic arguments for `usize`, not a comparison\n  --> /checkout/src/test/ui/issues/issue-22644.rs:27:20\n   |\nLL |                    < //~ ERROR `<` is interpreted as a start of generic\n   |                    ^ not interpreted as comparison\nLL |                    5);\n   |                    - interpreted as generic arguments\nhelp: try comparing the cast value\n   |\nLL |     println!(\"{}\", (a\nLL | \nLL | \nLL |                    as\nLL | \nLL | \n ...\n\n"}
[00:51:04] {"message":"`<` is interpreted as a start of generic arguments for `usize`, not a shift","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/issues/issue-22644.rs","byte_start":1007,"byte_end":1016,"line_start":30,"line_end":30,"column_start":34,"column_end":43,"is_primary":false,"text":[{"text":"    println!(\"{}\", a as usize << long_name); //~ ERROR `<` is interpreted as a start of generic","highlight_start":34,"highlight_end":43}],"label":"interpreted as generic arguments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"/checkout/src/test/ui/issues/issue-22644.rs","byte_start":1004,"byte_end":1006,"line_start":30,"line_end":30,"column_start":31,"column_end":33,"is_primary":true,"text":[{"text":"    println!(\"{}\", a as usize << long_name); //~ ERROR `<` is interpreted as a start of generic","highlight_start":31,"highlight_end":33}],"label":"not interpreted as shift","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"try shifting the cast value","code":null,"level":"help","spans":[{"file_name":"/checkout/src/test/ui/issues/issue-22644.rs","byte_start":993,"byte_end":1003,"line_start":30,"line_end":30,"column_start":20,"column_end":30,"is_primary":true,"text":[{"text":"    println!(\"{}\", a as usize << long_name); //~ ERROR `<` is interpreted as a start of generic","highlight_start":20,"highlight_end":30}],"label":null,"suggested_replacement":"(a as usize)","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"error: `<` is interpreted as a start of generic arguments for `usize`, not a shift\n  --> /checkout/src/test/ui/issues/issue-22644.rs:30:31\n   |\nLL |     println!(\"{}\", a as usize << long_name); //~ ERROR `<` is interpreted as a start of generic\n   |                    ---------- ^^ --------- interpreted as generic arguments\n   |                    |          |\n   |                    |          not interpreted as shift\n   |                    help: try shifting the cast value: `(a as usize)`\n\n"}
[00:51:04] thread 'main' panicked at 'Some tests failed', src/tools/compiletest/src/main.rs:495:22
[00:51:04] {"message":"expected type, found `4`","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/issues/issue-22644.rs","byte_start":1098,"byte_end":1099,"line_start":32,"line_end":32,"column_start":28,"column_end":29,"is_primary":true,"text":[{"text":"    println!(\"{}\", a: &mut 4); //~ ERROR expected type, found `4`","highlight_start":28,"highlight_end":29}],"label":"expecting a type here because of type ascription","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"error: expected type, found `4`\n  --> /checkout/src/test/ui/issues/issue-22644.rs:32:28\n   |\nLL |     println!(\"{}\", a: &mut 4); //~ ERROR expected type, found `4`\n   |                            ^ expecting a type here because of type ascription\n\n"}
[00:51:04] {"message":"type ascription is experimental (see issue #23416)","code":{"code":"E0658","explanation":"\nAn unstable feature was used.\n\nErroneous code example:\n\n```compile_fail,E658\n#[repr(u128)] // error: use of unstable library feature 'repr128'\nenum Foo {\n    Bar(u64),\n}\n```\n\nIf you're using a stable or a beta version of rustc, you won't be able to use\nany unstable features. In order to do so, please switch to a nightly version of\nrustc (by using rustup).\n\nIf you're using a nightly version of rustc, just add the corresponding feature\nto be able to use it:\n\n```\n#![feature(repr128)]\n\n#[repr(u128)] // ok!\nenum Foo {\n    Bar(u64),\n}\n```\n"},"level":"error","spans":[{"file_name":"/checkout/src/test/ui/issues/issue-22644.rs","byte_start":423,"byte_end":431,"line_start":10,"line_end":10,"column_start":20,"column_end":28,"is_primary":true,"text":[{"text":"    println!(\"{}\", a: usize > long_name);","highlight_start":20,"highlight_end":28}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"add #![feature(type_ascription)] to the crate attributes to enable","code":null,"level":"help","spans":[],"children":[],"rendered":null}],"rendered":"error[E0658]: type ascription is experimental (see issue #23416)\n  --> /checkout/src/test/ui/issues/issue-22644.rs:10:20\n   |\nLL |     println!(\"{}\", a: usize > long_name);\n   |                    ^^^^^^^^\n   |\n   = help: add #![feature(type_ascription)] to the crate attributes to enable\n\n"}
[00:51:04] {"message":"type ascription is experimental (see issue #23416)","code":{"code":"E0658","explanation":"\nAn unstable feature was used.\n\nErroneous code example:\n\n```compile_fail,E658\n#[repr(u128)] // error: use of unstable library feature 'repr128'\nenum Foo {\n    Bar(u64),\n}\n```\n\nIf you're using a stable or a beta version of rustc, you won't be able to use\nany unstable features. In order to do so, please switch to a nightly version of\nrustc (by using rustup).\n\nIf you're using a nightly version of rustc, just add the corresponding feature\nto be able to use it:\n\n```\n#![feature(repr128)]\n\n#[repr(u128)] // ok!\nenum Foo {\n    Bar(u64),\n}\n```\n"},"level":"error","spans":[{"file_name":"/checkout/src/test/ui/issues/issue-22644.rs","byte_start":467,"byte_end":475,"line_start":11,"line_end":11,"column_start":22,"column_end":30,"is_primary":true,"text":[{"text":"    println!(\"{}{}\", a: usize < long_name, long_name);","highlight_start":22,"highlight_end":30}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"add #![feature(type_ascription)] to the crate attributes to enable","code":null,"level":"help","spans":[],"children":[],"rendered":null}],"rendered":"error[E0658]: type ascription is experimental (see issue #23416)\n  --> /checkout/src/test/ui/issues/issue-22644.rs:11:22\n   |\nLL |     println!(\"{}{}\", a: usize < long_name, long_name);\n   |                      ^^^^^^^^\n   |\n   = help: add #![feature(type_ascription)] to the crate attributes to enable\n\n"}
[00:51:04] {"message":"type ascription is experimental (see issue #23416)","code":{"code":"E0658","explanation":"\nAn unstable feature was used.\n\nErroneous code example:\n\n```compile_fail,E658\n#[repr(u128)] // error: use of unstable library feature 'repr128'\nenum Foo {\n    Bar(u64),\n}\n```\n\nIf you're using a stable or a beta version of rustc, you won't be able to use\nany unstable features. In order to do so, please switch to a nightly version of\nrustc (by using rustup).\n\nIf you're using a nightly version of rustc, just add the corresponding feature\nto be able to use it:\n\n```\n#![feature(repr128)]\n\n#[repr(u128)] // ok!\nenum Foo {\n    Bar(u64),\n}\n```\n"},"level":"error","spans":[{"file_name":"/checkout/src/test/ui/issues/issue-22644.rs","byte_start":576,"byte_end":584,"line_start":13,"line_end":13,"column_start":20,"column_end":28,"is_primary":true,"text":[{"text":"    println!(\"{}\", a: usize < 4); //~ ERROR `<` is interpreted as a start of generic","highlight_start":20,"highlight_end":28}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"add #![feature(type_ascription)] to the crate attributes to enable","code":null,"level":"help","spans":[],"children":[],"rendered":null}],"rendered":"error[E0658]: type ascription is experimental (see issue #23416)\n  --> /checkout/src/test/ui/issues/issue-22644.rs:13:20\n   |\nLL |     println!(\"{}\", a: usize < 4); //~ ERROR `<` is interpreted as a start of generic\n   |                    ^^^^^^^^\n   |\n   = help: add #![feature(type_ascription)] to the crate attributes to enable\n\n"}
[00:51:04] {"message":"aborting due to 12 previous errors","code":null,"level":"error","spans":[],"children":[],"rendered":"error: aborting due to 12 previous errors\n\n"}
[00:51:04] {"message":"For more information about this error, try `rustc --explain E0658`.","code":null,"level":"","spans":[],"children":[],"rendered":"For more information about this error, try `rustc --explain E0658`.\n"}
[00:51:04] ------------------------------------------
[00:51:04] 
[00:51:04] thread '[ui] ui/issues/issue-22644.rs' panicked at 'explicit panic', src/tools/compiletest/src/runtest.rs:3245:9
[00:51:04] note: Run with `RUST_BACKTRACE=1` for a backtrace.
---
[00:51:04] test result: FAILED. 5190 passed; 1 failed; 27 ignored; 0 measured; 0 filtered out
[00:51:04] 
[00:51:04] 
[00:51:04] 
[00:51:04] command did not execute successfully: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage0-tools-bin/compiletest" "--compile-lib-path" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib" "--run-lib-path" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/rustlib/x86_64-unknown-linux-musl/lib" "--rustc-path" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "--src-base" "/checkout/src/test/ui" "--build-base" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui" "--stage-id" "stage2-x86_64-unknown-linux-musl" "--mode" "ui" "--target" "x86_64-unknown-linux-musl" "--host" "x86_64-unknown-linux-gnu" "--llvm-filecheck" "/checkout/obj/build/x86_64-unknown-linux-gnu/llvm/build/bin/FileCheck" "--linker" "/musl-x86_64/bin/musl-gcc" "--host-rustcflags" "-Crpath -O -Zunstable-options  -Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "--target-rustcflags" "-Crpath -O -Zunstable-options  -Lnative=/checkout/obj/build/x86_64-unknown-linux-musl/native/rust-test-helpers" "--docck-python" "/usr/bin/python2.7" "--lldb-python" "/usr/bin/python2.7" "--gdb" "/usr/bin/gdb" "--llvm-version" "8.0.0svn\n" "--cc" "" "--cxx" "" "--cflags" "" "--llvm-components" "" "--llvm-cxxflags" "" "--adb-path" "adb" "--adb-test-dir" "/data/tmp/work" "--android-cross-path" "" "--color" "always"
[00:51:04] 
[00:51:04] 
[00:51:04] failed to run: /checkout/obj/build/bootstrap/debug/bootstrap test --target x86_64-unknown-linux-musl
[00:51:04] Build completed unsuccessfully in 0:48:55
---
travis_time:end:217eaa52:start=1546289758373373245,finish=1546289758380612578,duration=7239333
travis_fold:end:after_failure.3
travis_fold:start:after_failure.4
travis_time:start:00de7a90
$ ln -s . checkout && for CORE in obj/cores/core.*; do EXE=$(echo $CORE | sed 's|obj/cores/core\.[0-9]*\.!checkout!\(.*\)|\1|;y|!|/|'); if [ -f "$EXE" ]; then printf travis_fold":start:crashlog\n\033[31;1m%s\033[0m\n" "$CORE"; gdb --batch -q -c "$CORE" "$EXE" -iex 'set auto-load off' -iex 'dir src/' -iex 'set sysroot .' -ex bt -ex q; echo travis_fold":"end:crashlog; fi; done || true
travis_fold:end:after_failure.4
travis_fold:start:after_failure.5
travis_time:start:0a6598e0
travis_time:start:0a6598e0
$ cat ./obj/build/x86_64-unknown-linux-gnu/native/asan/build/lib/asan/clang_rt.asan-dynamic-i386.vers || true
cat: ./obj/build/x86_64-unknown-linux-gnu/native/asan/build/lib/asan/clang_rt.asan-dynamic-i386.vers: No such file or directory
travis_fold:end:after_failure.5
travis_fold:start:after_failure.6
travis_time:start:13eaf484
$ dmesg | grep -i kill

I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact @TimNN. (Feature Requests)

@kennytm kennytm added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jan 1, 2019
This commit completely removes usage of the `panictry!` macro from
outside libsyntax. The macro causes parse errors to be fatal, so using
it in libsyntax_ext caused parse failures *within* a syntax extension to
be fatal, which is probably not intended.

Furthermore, this commit adds spans to diagnostics emitted by empty
extensions if they were missing, à la rust-lang#56491.
@euclio
Copy link
Contributor Author

euclio commented Jan 2, 2019

@estebank The non-fatal errors (and 15cefe4?) were exposing some new errors from typechecking and feature gating in src/test/ui/issues/issue-22644.rs. Rebased and fixed.

fn main() {
let a : u32 = 0;
let a : usize = 0;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why was this type changed? Isn't the fix only to enable type_ascription?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, without this change the ascription causes type mismatch errors.

@estebank
Copy link
Contributor

estebank commented Jan 2, 2019

@bors r+

@bors
Copy link
Contributor

bors commented Jan 2, 2019

📌 Commit 0a6fb84 has been approved by estebank

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Jan 2, 2019
Mark-Simulacrum added a commit to Mark-Simulacrum/rust that referenced this pull request Jan 3, 2019
make `panictry!` private to libsyntax

This commit completely removes usage of the `panictry!` macro from
outside libsyntax. The macro causes parse errors to be fatal, so using
it in libsyntax_ext caused parse failures *within* a syntax extension to
be fatal, which is probably not intended.

Furthermore, this commit adds spans to diagnostics emitted by empty
extensions if they were missing, à la rust-lang#56491.
@bors
Copy link
Contributor

bors commented Jan 4, 2019

⌛ Testing commit 0a6fb84 with merge f381a96...

bors added a commit that referenced this pull request Jan 4, 2019
make `panictry!` private to libsyntax

This commit completely removes usage of the `panictry!` macro from
outside libsyntax. The macro causes parse errors to be fatal, so using
it in libsyntax_ext caused parse failures *within* a syntax extension to
be fatal, which is probably not intended.

Furthermore, this commit adds spans to diagnostics emitted by empty
extensions if they were missing, à la #56491.
@bors
Copy link
Contributor

bors commented Jan 4, 2019

☀️ Test successful - status-appveyor, status-travis
Approved by: estebank
Pushing f381a96 to master...

@bors bors merged commit 0a6fb84 into rust-lang:master Jan 4, 2019
@euclio euclio deleted the parse-fatal branch January 28, 2019 21:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants