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

Removed the promotable field from CheckCrateVisitor... #52318

Merged
merged 1 commit into from
Jul 15, 2018

Conversation

TheDarkula
Copy link
Contributor

@TheDarkula TheDarkula commented Jul 12, 2018

and replaced it with the custom enum Promotability.

r? @oli-obk

@rust-highfive rust-highfive added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Jul 12, 2018
@oli-obk
Copy link
Contributor

oli-obk commented Jul 12, 2018

ping @eddyb probably of interest to you

I need this for being able to do #51570 (comment) properly. It was next to impossible to do with the mutable state present.

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

[00:03:51] travis_fold:start:tidy
travis_time:start:tidy
tidy check
[00:03:51] tidy error: /checkout/src/librustc_passes/rvalue_promotion.rs:640: line longer than 100 chars
[00:03:53] some tidy checks failed
[00:03:53] 
[00:03:53] 
[00:03:53] command did not execute successfully: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage0-tools-bin/tidy" "/checkout/src" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage0/bin/cargo" "--no-vendor" "--quiet"
[00:03:53] 
[00:03:53] 
[00:03:53] failed to run: /checkout/obj/build/bootstrap/debug/bootstrap test src/tools/tidy
[00:03:53] Build completed unsuccessfully in 0:00:52
[00:03:53] Build completed unsuccessfully in 0:00:52
[00:03:53] make: *** [tidy] Error 1
[00:03:53] Makefile:79: recipe for target 'tidy' failed

The command "stamp sh -x -c "$RUN_SCRIPT"" exited with 2.
travis_time:start:04ba20ba
$ date && (curl -fs --head https://google.com | grep ^Date: | sed 's/Date: //g' || true)
---
travis_time:end:1660802a:start=1531418573223763121,finish=1531418573230183111,duration=6419990
travis_fold:end:after_failure.3
travis_fold:start:after_failure.4
travis_time:start:18878b08
$ head -30 ./obj/build/x86_64-unknown-linux-gnu/native/asan/build/lib/asan/clang_rt.asan-dynamic-i386.vers || true
head: cannot open ‘./obj/build/x86_64-unknown-linux-gnu/native/asan/build/lib/asan/clang_rt.asan-dynamic-i386.vers’ for reading: No such file or directory
travis_fold:end:after_failure.4
travis_fold:start:after_failure.5
travis_time:start:01051bfc
$ 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)

struct Promotable;

struct NotPromotable;

impl<'a, 'gcx> CheckCrateVisitor<'a, 'gcx> {
// Returns true iff all the values of the type are promotable.
fn type_has_only_promotable_values(&mut self, ty: Ty<'gcx>) -> bool {
Copy link
Member

Choose a reason for hiding this comment

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

This should also return Result, I'm guessing.

impl<'a, 'gcx> CheckCrateVisitor<'a, 'gcx> {
// Returns true iff all the values of the type are promotable.
fn type_has_only_promotable_values(&mut self, ty: Ty<'gcx>) -> bool {
debug!("In type_has_only_promotable_values(), ty: {:#?}", ty);
Copy link
Member

Choose a reason for hiding this comment

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

The typical style for this is more like:

debug!("type_has_only_promotable_values({})", ty);

fn handle_const_fn_call(&mut self, def_id: DefId,
ret_ty: Ty<'gcx>, span: Span) -> Result<Promotable, NotPromotable> {
debug!("In handle_const_fn_call(), def_id: {:#?}, span: {:#?}, ret_ty: {:#?}",
def_id, span, ret_ty);
Copy link
Member

Choose a reason for hiding this comment

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

Same here. Also, please don't use {:#?} unless necessary, it makes debug logs harder to work with. Also, for Ty you only need {}, not even {:?}.

Copy link
Contributor

Choose a reason for hiding this comment

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

That one's on me. The logs were unreadable in the unexpanded version (well not for types, but everything else) I wish we had a way to switch the style with an env var

Copy link
Member

Choose a reason for hiding this comment

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

That's weird. Neither Span nor DefId should be doing anything with {:#?}. Maybe you mean the AST? But I wouldn't print ASTs at all...

Copy link
Contributor

Choose a reason for hiding this comment

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

Yea the ASTs. They were pretty helpful during debugging.

Copy link
Member

Choose a reason for hiding this comment

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

cc @nikomatsakis We've avoided printing ASTs in debug! before, and a lot of times they are useless (i.e. printing NodeIds with --unpretty=hir,identified can be a better debugging experience), but maybe I'm wrong.

@@ -159,6 +179,8 @@ impl<'a, 'gcx> CheckCrateVisitor<'a, 'gcx> {
/// and transfer it over to the value being matched. This will
/// then prevent said value from being promoted.
fn remove_mut_rvalue_borrow(&mut self, pat: &hir::Pat) -> bool {
debug!("In remove_mut_rvalue_borrow(), pat: {:#?}", pat);
Copy link
Member

Choose a reason for hiding this comment

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

Same here and everywhere in the file, I guess. (it's always a good idea to copy the style from somewhere else in the compiler)

@@ -170,6 +192,8 @@ impl<'a, 'gcx> CheckCrateVisitor<'a, 'gcx> {

impl<'a, 'tcx> CheckCrateVisitor<'a, 'tcx> {
Copy link
Member

Choose a reason for hiding this comment

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

Since when is this not a visitor impl, huh?!

self.in_fn = outer_in_fn;
self.tables = outer_tables;
self.param_env = outer_param_env;
self.identity_substs = outer_identity_substs;
}

fn visit_stmt(&mut self, stmt: &'tcx hir::Stmt) {
fn visit_stmt(&mut self, stmt: &'tcx hir::Stmt) -> Result<Promotable, NotPromotable> {
Copy link
Member

Choose a reason for hiding this comment

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

If you're going to change the signatures of these functions, I'd also change the names to check_* instead of visit_*.

}
_ => Err(NotPromotable),
};
def_result.and(call_result)
Copy link
Member

Choose a reason for hiding this comment

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

You don't need to do anything like this, you can return early at the first sign of Err.

Copy link
Contributor

Choose a reason for hiding this comment

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

All visit_* calls need to happen, otherwise if e.g. the first function argument is not promotable, the next one isn't going to be inserted into the promotable map, even if it were promotable

In this case we can early abort right after the for loop though

Copy link
Member

Choose a reason for hiding this comment

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

Oh, right, oops, you're right. Why are you even using Result then though? I'm guessing for clarity?

Copy link
Contributor

Choose a reason for hiding this comment

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

Yea we could move to a custom enum. Do you prefer that? At the beginning I thought the same thing wrt early return, but it's actually pretty easy to screw up, so maybe a custom enum would be better

Copy link
Member

Choose a reason for hiding this comment

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

Yupp! Frankly I'm happing with a boolean but those have && and || so a custom enum that implements BitAnd is probably the best option.

}

fn handle_const_fn_call(&mut self, def_id: DefId,
ret_ty: Ty<'gcx>, span: Span) -> Promotability {
debug!("In handle_const_fn_call(), def_id: {:#?}, span: {:#?}, ret_ty: {:#?}",
def_id, span, ret_ty);

if !self.type_has_only_promotable_values(ret_ty) { return NotPromotable; }
let promotability_output = self.type_promotability(ret_ty);
if let Promotable = promotability_output {
Copy link
Contributor

Choose a reason for hiding this comment

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

remove this if let and just & the promotability_output into the other variables at the end of this function

return NotPromotable
let promotability_output = v.type_promotability(node_ty);
if !promotable {
return promotability_output;
Copy link
Contributor

Choose a reason for hiding this comment

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

remove the promotable variable entirely and return NotPromotable` in the appropriate places in the if condition above

return NotPromotable
let promotability_output = v.type_promotability(node_ty);
if !promotable {
return promotability_output;
}
Promotable
Copy link
Contributor

Choose a reason for hiding this comment

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

remove this and just place the v.type_promotability(node_ty) call here and let the value fall through

@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.
Check compiletest suite=ui mode=ui (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
[00:44:23] 
[00:44:23] running 1562 tests
[00:44:26] ..................................................................................................i.
[00:44:30] ..........................F...F.................................i...................................
[00:44:35] ....................................................................................................
[00:44:37] ....................................................................................................
[00:44:39] ....................................................................................................
[00:44:43] ....................................................................................................
[00:44:43] ....................................................................................................
[00:44:46] ....................................................................................................
[00:44:49] ....................................................................................................
[00:44:52] ....................................................................................................
[00:44:56] .......................................i............................................................
[00:44:59] ............................i.......................................................................
[00:45:03] ....................................................................................................
[00:45:07] ..............................F..................F...........................................F......
[00:45:11] ................................................F...........................i.......................
[00:45:13] failures:
[00:45:13] 
[00:45:13] ---- [ui] ui/const-eval/closure_promotion.rs stdout ----
[00:45:13] normalized stderr:
[00:45:13] normalized stderr:
[00:45:13] error[E0597]: borrowed value does not live long enough
[00:45:13]    |
[00:45:13]    |
[00:45:13] LL |     let x: &'static _ = &|| { let z = 3; z }; //~ ERROR does not live long enough
[00:45:13]    |                          ^^^^^^^^^^^^^^^^^^^ temporary value does not live long enough
[00:45:13] LL | }
[00:45:13]    | - temporary value only lives until here
[00:45:13]    |
[00:45:13]    = note: borrowed value must be valid for the static lifetime...
[00:45:13] thread 'main' panicked at 'Some tests failed', tools/compiletest/src/main.rs:498:22
[00:45:13] error: aborting due to previous error
[00:45:13] 
[00:45:13] For more information about this error, try `rustc --explain E0597`.
[00:45:13] 
[00:45:13] 
[00:45:13] 
[00:45:13] 
[00:45:13] The actual stderr differed from the expected stderr.
[00:45:13] Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/const-eval/closure_promotion/closure_promotion.stderr
[00:45:13] To update references, rerun the tests and pass the `--bless` flag
[00:45:13] To only update this specific test, also pass `--test-args const-eval/closure_promotion.rs`
[00:45:13] error: 1 errors occurred comparing output.
[00:45:13] status: exit code: 101
[00:45:13] status: exit code: 101
[00:45:13] command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/const-eval/closure_promotion.rs" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-testing" "-C" "prefer-dynamic" "-o" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/const-eval/closure_promotion/a" "-Crpath" "-O" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/const-eval/closure_promotion/auxiliary" "-A" "unused"
[00:45:13] ------------------------------------------
[00:45:13] 
[00:45:13] ------------------------------------------
[00:45:13] stderr:
[00:45:13] stderr:
[00:45:13] ------------------------------------------
[00:45:13] {"message":"borrowed value does not live long enough","code":{"code":"E0597","explanation":"\nThis error occurs because a borrow was made inside a variable which has a\ngreater lifetime than the borrowed one.\n\nExample of erroneous code:\n\n```compile_fail,E0597\nstruct Foo<'a> {\n    x: Option<&'a u32>,\n}\n\nlet mut x = Foo { x: None };\nlet y = 0;\nx.x = Some(&y); // error: `y` does not live long enough\n```\n\nIn here, `x` is created before `y` and therefore has a greater lifetime. Always\nkeep in mind that values in a scope are dropped in the opposite order they are\ncreated. So to fix the previous example, just make the `y` lifetime greater than\nthe `x`'s one:\n\n```\nstruct Foo<'a> {\n    x: Option<&'a u32>,\n}\n\nlet y = 0;\nlet mut x = Foo { x: None };\nx.x = Some(&y);\n```\n"},"level":"error","spans":[{"file_name":"/checkout/src/test/ui/const-eval/closure_promotion.rs","byte_start":526,"byte_end":545,"line_start":14,"line_end":14,"column_start":26,"column_end":45,"is_primary":true,"text":[{"text":"    let x: &'static _ = &|| { let z = 3; z }; //~ ERROR does not live long enough","highlight_start":26,"highlight_end":45}],"label":"temporary value does not live long enough","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"/checkout/src/test/ui/const-eval/closure_promotion.rs","byte_start":583,"byte_end":584,"line_start":15,"line_end":15,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"}","highlight_start":1,"highlight_end":2}],"label":"temporary value only lives until here","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"borrowed value must be valid for the static lifetime...","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error[E0597]: borrowed value does not live long enough\n  --> /checkout/src/test/ui/const-eval/closure_promotion.rs:14:26\n   |\nLL |     let x: &'static _ = &|| { let z = 3;    = note: borrowed value must be valid for the static lifetime...
[00:45:13] + error: aborting due to previous error
[00:45:13] 18 
[00:45:13] - error[E0597]: borrowed value does not live long enough
[00:45:13] -   --> $DIR/dont_promote_unstable_const_fn.rs:32:28
[00:45:13] -    |
[00:45:13] - LL |     let _: &'static u32 = &meh(); //~ ERROR does not live long enough
[00:45:13] -    |                            ^^^^^ temporary value does not live long enough
[00:45:13] - LL |     let x: &'static _ = &std::time::Duration::from_millis(42).subsec_millis();
[00:45:13] - LL | }
[00:45:13] -    | - temporary value only lives until here
[00:45:13] -    |
[00:45:13] -    = note: borrowed value must be valid for the static lifetime...
[00:45:13] - error: aborting due to 3 previous errors
[00:45:13] - 
[00:45:13] - For more information about this error, try `rustc --explain E0597`.
[00:45:13] 33 
[00:45:13] 33 
[00:45:13] 
[00:45:13] 
[00:45:13] The actual stderr differed from the expected stderr.
[00:45:13] Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/const-eval/dont_promote_unstable_const_fn/dont_promote_unstable_const_fn.stderr
[00:45:13] To update references, rerun the tests and pass the `--bless` flag
[00:45:13] To only update this specific test, also pass `--test-args const-eval/dont_promote_unstable_const_fn.rs`
[00:45:13] error: 1 errors occurred comparing output.
[00:45:13] status: exit code: 101
[00:45:13] status: exit code: 101
[00:45:13] command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/const-eval/dont_promote_unstable_const_fn.rs" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-testing" "-C" "prefer-dynamic" "-o" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/const-eval/dont_promote_unstable_const_fn/a" "-Crpath" "-O" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/const-eval/dont_promote_unstable_const_fn/auxiliary" "-A" "unused"
[00:45:13] ------------------------------------------
[00:45:13] 
[00:45:13] ------------------------------------------
[00:45:13] stderr:
[00:45:13] stderr:
[00:45:13] ------------------------------------------
[00:45:13] {"message":"`foo` is not yet stable as a const fn","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/const-eval/dont_promote_unstable_const_fn.rs","byte_start":867,"byte_end":872,"line_start":25,"line_end":25,"column_start":25,"column_end":30,"is_primary":true,"text":[{"text":"const fn bar() -> u32 { foo() } //~ ERROR `foo` is not yet stable as a const fn","highlight_start":25,"highlight_end":30}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"in Nightly builds, add `#![feature(foo)]` to the crate attributes to enable","code":null,"level":"help","spans":[],"children":[],"rendered":null}],"rendered":"error: `foo` is not yet stable as a const fn\n  --> /checkout/src/test/ui/const-eval/dont_promote_unstable_const_fn.rs:25:25\n   |\nLL | const fn bar() -> u32 { foo() } //~ ERROR `foo` is not yet stable as a const fn\n   |                         ^^^^^\n   |\n   = help: in Nightly builds, add `#![feature(foo)]` to the crate attributes to enable\n\n"}
[00:45:13] {"message":"aborting due to previous error","code":null,"level":"error","spans":[],"children":[],"rendered":"error: aborting due to previous error\n\n"}
[00:45:13] ------------------------------------------
[00:45:13] 
[00:45:13] thread '[ui] ui/const-eval/dont_promote_unstable_const_fn.rs' panicked at 'explicit panic', tools/compiletest/src/runtest.rs:3139:9
[00:45:13] 
[00:45:13] 
[00:45:13] ---- [ui] ui/span/borrowck-let-suggestion-suffixes.rs stdout ----
[00:45:13] diff of stderr:
[00:45:13] 
[00:45:13] 9    |
[00:45:13] 10    = note: values in a scope are dropped in the opposite order they are created
[00:45:13] 11 
[00:45:13] - error[E0597]: borrowed value does not live long enough
[00:45:13] -    |
[00:45:13] -    |
[00:45:13] - LL |     v3.push(&id('x'));           // statement 6
[00:45:13] -    |              ^^^^^^^ - temporary value dropped here while still borrowed
[00:45:13] -    |              |
[00:45:13] -    |              temporary value does not live long enough
[00:45:13] - ...
[00:45:13] - LL | }
[00:45:13] -    | - temporary value needs to live until here
[00:45:13] -    |
[00:45:13] -    = note: consider using a `let` binding to increase its lifetime
[00:45:13] - 
[00:45:13] - error[E0597]: borrowed value does not live long enough
[00:45:13] -    |
[00:45:13] -    |
[00:45:13] - LL |         v4.push(&id('y'));
[00:45:13] -    |                  ^^^^^^^ - temporary value dropped here while still borrowed
[00:45:13] -    |                  |
[00:45:13] -    |                  temporary value does not live long enough
[00:45:13] - ...
[00:45:13] - LL |     }                       // (statement 7)
[00:45:13] -    |     - temporary value needs to live until here
[00:45:13] -    |
[00:45:13] -    = note: consider using a `let` binding to increase its lifetime
[00:45:13] - 
[00:45:13] - error[E0597]: borrowed value does not live long enough
[00:45:13] -    |
[00:45:13] -    |
[00:45:13] - LL |     v5.push(&id('z'));
[00:45:13] -    |              ^^^^^^^ - temporary value dropped here while still borrowed
[00:45:13] -    |              |
[00:45:13] -    |              temporary value does not live long enough
[00:45:13] - ...
[00:45:13] - LL | }
[00:45:13] -    | - temporary value needs to live until here
[00:45:13] -    |
[00:45:13] -    = note: consider using a `let` binding to increase its lifetime
[00:45:13] - error: aborting due to 4 previous errors
[00:45:13] + error: aborting due to previous error
[00:45:13] 52 
[00:45:13] 53 For more information about this error, try `rustc --explain E0597`.
[00:45:13] 53 For more information about this error, try `rustc --explain E0597`.
[00:45:13] 54 
[00:45:13] 
[00:45:13] 
[00:45:13] The actual stderr differed from the expected stderr.
[00:45:13] Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/span/borrowck-let-suggestion-suffixes/borrowck-let-suggestion-suffixes.stderr
[00:45:13] To update references, rerun the tests and pass the `--bless` flag
[00:45:13] To only update this specific test, also pass `--test-args span/borrowck-let-suggestion-suffixes.rs`
[00:45:13] error: 1 errors occurred comparing output.
[00:45:13] status: exit code: 101
[00:45:13] status: exit code: 101
[00:45:13] command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/span/borrowck-let-suggestion-suffixes.rs" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-testing" "-C" "prefer-dynamic" "-o" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/span/borrowck-let-suggestion-suffixes/a" "-Crpath" "-O" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/span/borrowck-let-suggestion-suffixes/auxiliary" "-A" "unused"
[00:45:13] ------------------------------------------
[00:45:13] 
[00:45:13] ------------------------------------------
[00:45:13] stderr:
[00:45:13] stderr:
[00:45:13] ------------------------------------------
[00:45:13] {"message":"`young[..]` does not live long enough","code":{"code":"E0597","explanation":"\nThis error occurs because a borrow was made inside a variable which has a\ngreater lifetime than the borrowed one.\n\nExample of erroneous code:\n\n```compile_fail,E0597\nstruct Foo<'a> {\n    x: Option<&'a u32>,\n}\n\nlet mut x = Foo { x: None };\nlet y = 0;\nx.x = Some(&y); // error: `y` does not live long enough\n```\n\nIn here, `x` is created before `y` and therefore has a greater lifetime. Always\nkeep in mind that values in a scope are dropped in the opposite order they are\ncreated. So to fix the previous example, just make the `y` lifetime greater than\nthe `x`'s one:\n\n```\nstruct Foo<'a> {\n    x: Option<&'a u32>,\n}\n\nlet y = 0;\nlet mut x = Foo { x: None };\nx.x = Some(&y);\n```\n"},"level":"error","spans":[{"file_name":"/checkout/src/test/ui/span/borrowck-let-suggestion-suffixes.rs","byte_start":719,"byte_end":727,"line_start":21,"line_end":21,"column_start":14,"column_end":22,"is_primary":true,"text":[{"text":"    v2.push(&young[0]);      // statement 4","highlight_start":14,"highlight_end":22}],"label":"borrowed value does not live long enough","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"/checkout/src/test/ui/span/borrowck-let-suggestion-suffixes.rs","byte_start":2145,"byte_end":2146,"line_start":58,"line_end":58,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"}","highlight_start":1,"highlight_end":2}],"label":"`young[..]` dropped here while still borrowed","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"values in a scope are dropped in the opposite order they are created","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error[E0597]: `young[..]` does not live long enough\n  --> /checkout/src/test/ui/span/borrowck-let-suggestion-suffixes.rs:21:14\n   |\nLL |     v2.push(&young[0]);      // statement 4\n   |              ^^^^^^^^ borrowed value does not live long enough\n...\nLL | }\n   | - `young[..]` dropped here while still borrowed\n   |\n   = note: values in a scope are dropped in the opposite order they are created\n\n"}
[00:45:13] {"message":"aborting due to previous error","code":null,"level":"error","spans":[],"children":[],"rendered":"error: aborting due to previous error\n\n"}
[00:45:13] {"message":"For more information about this error, try `rustc --explain E0597`.","code":null,"level":"","spans":[],"children":[],"rendered":"For more information about this error, try `rustc --explain E0597`.\n"}
[00:45:13] ------------------------------------------
[00:45:13] 
[00:45:13] thread '[ui] ui/span/borrowck-let-suggestion-suffixes.rs' panicked at 'explicit panic', tools/compiletest/src/runtest.rs:3139:9
[00:45:13] 
[00:45:13] 
[00:45:13] ---- [ui] ui/span/issue-15480.rs stdout ----
[00:45:13] 
[00:45:13] error: ui test compiled successfully!
[00:45:13] status: exit code: 0
[00:45:13] command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/span/issue-15480.rs" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-testing" "-C" "prefer-dynamic" "-o" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/span/issue-15480/a" "-Crpath" "-O" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/span/issue-15480/auxiliary" "-A" "unused"
[00:45:13] ------------------------------------------
[00:45:13] 
[00:45:13] ------------------------------------------
[00:45:13] stderr:
---
[00:45:13] ---- [ui] ui/span/regions-close-over-borrowed-ref-in-obj.rs stdout ----
[00:45:13] 
[00:45:13] error: ui test compiled successfully!
[00:45:13] status: exit code: 0
[00:45:13] command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/span/regions-close-over-borrowed-ref-in-obj.rs" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-testing" "-C" "prefer-dynamic" "-o" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/span/regions-close-over-borrowed-ref-in-obj/a" "-Crpath" "-O" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/span/regions-close-over-borrowed-ref-in-obj/auxiliary" "-A" "unused"
[00:45:13] ------------------------------------------
[00:45:13] 
[00:45:13] ------------------------------------------
[00:45:13] stderr:
---
[00:45:13] ---- [ui] ui/suggestions/issue-52049.rs stdout ----
[00:45:13] 
[00:45:13] error: ui test compiled successfully!
[00:45:13] status: exit code: 0
[00:45:13] command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/suggestions/issue-52049.rs" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-testing" "-C" "prefer-dynamic" "-o" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/suggestions/issue-52049/a" "-Crpath" "-O" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/suggestions/issue-52049/auxiliary" "-A" "unused"
[00:45:13] ------------------------------------------
[00:45:13] 
[00:45:13] ------------------------------------------
[00:45:13] stderr:
---
[00:45:13] test result: FAILED. 1551 passed; 6 failed; 5 ignored; 0 measured; 0 filtered out
[00:45:13] 
[00:45:13] 
[00:45:13] 
[00:45:13] 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-gnu/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-gnu" "--mode" "ui" "--target" "x86_64-unknown-linux-gnu" "--host" "x86_64-unknown-linux-gnu" "--llvm-filecheck" "/usr/lib/llvm-5.0/bin/FileCheck" "--host-rustcflags" "-Crpath -O -Zunstable-options " "--target-rustcflags" "-Crpath -O -Zunstable-options  -Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "--docck-python" "/usr/bin/python2.7" "--lldb-python" "/usr/bin/python2.7" "--gdb" "/usr/bin/gdb" "--quiet" "--llvm-version" "5.0.0\n" "--system-llvm" "--cc" "" "--cxx" "" "--cflags" "" "--llvm-components" "" "--llvm-cxxflags" "" "--adb-path" "adb" "--adb-test-dir" "/data/tmp/work" "--android-cross-path" "" "--color" "always"
[00:45:13] 
[00:45:13] 
[00:45:13] failed to run: /checkout/obj/build/bootstrap/debug/bootstrap test
[00:45:13] Build completed unsuccessfully in 0:01:25
[00:45:13] Build completed unsuccessfully in 0:01:25
[00:45:13] Makefile:58: recipe for target 'check' failed
[00:45:13] make: *** [check] Error 1

The command "stamp sh -x -c "$RUN_SCRIPT"" exited with 2.
travis_time:start:05c50b81
$ date && (curl -fs --head https://google.com | grep ^Date: | sed 's/Date: //g' || true)

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)

@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.
/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
  Downloading https://files.pythonhosted.org/packages/80/2b/ed30c7941731231afb7d3e97368accd2319047123c75fa7dd043ca39be04/awscli-1.15.59-py2.py3-none-any.whl (1.3MB)
    0% |▎                               | 10kB 14.5MB/s eta 0:00:01
    1% |▌                               | 20kB 1.9MB/s eta 0:00:01
    2% |▊                               | 30kB 2.2MB/s eta 0:00:01
    3% |█                               | 40kB 2.0MB/s eta 0:00:01
---
  Downloading https://files.pythonhosted.org/packages/db/c8/7dcf9dbcb22429512708fe3a547f8b6101c0d02137acbd892505aee57adf/colorama-0.3.9-py2.py3-none-any.whl
Collecting botocore==1.10.58 (from awscli)
/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
  Downloading https://files.pythonhosted.org/packages/cb/6e/4d961f0c98007ba077a64626f4e0056e5351cca54653b15d12bb03c32110/botocore-1.10.58-py2.py3-none-any.whl (4.4MB)
    0% |                                | 10kB 52.5MB/s eta 0:00:01
    0% |▏                               | 20kB 49.1MB/s eta 0:00:01
    0% |▎                               | 30kB 54.2MB/s eta 0:00:01
    0% |▎                               | 40kB 23.5MB/s eta 0:00:01
---
Check compiletest suite=ui mode=ui (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
[00:45:08] 
[00:45:08] running 1565 tests
[00:45:12] ..................................................................................................i.
[00:45:16] ..........................F.....................................i...................................
[00:45:20] ....................................................................................................
[00:45:23] ....................................................................................................
[00:45:25] ....................................................................................................
[00:45:28] ....................................................................................................
---
[00:45:44] .............................i......................................................................
[00:45:48] ....................................................................................................
[00:45:51] ....................................................................................................
[00:45:55] ...............................................................................i....................
ive long enough\n```\n\nIn here, `x` is created before `y` and therefore has a greater lifetime. Always\nkeep in mind that values in a scope are dropped in the opposite order they are\ncreated. So to fix the previous example, just make the `y` lifetime greater than\nthe `x`'s one:\n\n```\nstruct Foo<'a> {\n    x: Option<&'a u32>,\n}\n\nlet y = 0;\nlet mut x = Foo { x: None };\nx.x = Some(&y);\n```\n"},"level":"error","spans":[{"file_name":"/checkout/src/test/ui/const-eval/closure_promotion.rs","byte_start":526,"byte_end":545,"line_start":14,"line_end":14,"column_start":26,"column_end":45,"is_primary":true,"text":[{"text":"    let x: &'static _ = &|| { let z = 3; z }; //~ ERROR does not live long enough","highlight_start":26,"highlight_end":45}],"label":"temporary value does not live long enough","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"/checkout/src/test/ui/const-eval/closure_promotion.rs","byte_start":583,"byte_end":584,"line_start":15,"line_end":15,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"}","highlight_start":1,"highlight_end":2}],"label":"temporary value only lives until here","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"borrowed value must be valid for the static lifetime...","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error[E0597]: borrowed value does not live long enough\n  --> /checkout/src/test/ui/const-eval/closure_promotion.rs:14:26\n   |\nLL |     let x: &'static _ = &|| { let z = 3; z }; //~ ERROR does not live long enough\n   |                          ^^^^^^^^^^^^^^^^^^^ temporary value does not live long enough\nLL | }\n   | - temporary value only lives until here\n   |\n   = note: borrowed value must be valid for the static lifetime...\n\n"}
[00:45:57] {"message":"aborting due to previous error","code":null,"level":"error","spans":[],"children":[],"rendered":"error: aborting due to previous error\n\n"}
[00:45:57] {"message":"For more information about this error, try `rustc --explain E0597`.","code":null,"level":"","spans":[],"children":[],"rendered":"For more information about this error, try `rustc --explain E0597`.\n"}
[00:45:57] ------------------------------------------
[00:45:57] 
[00:45:57] thread '[ui] ui/const-eval/closure_promotion.rs' panicked at 'explicit panic', tools/compiletest/src/runtest.rs:3139:9
[00:45:57] note: Run with `RUST_BACKTRACE=1` for a backtrace.
---
[00:45:57] test result: FAILED. 1559 passed; 1 failed; 5 ignored; 0 measured; 0 filtered out
[00:45:57] 
[00:45:57] 
[00:45:57] 
[00:45:57] 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-gnu/lib" "--rustc-path" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "--src-base" "/checkout/sr

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)

@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.
/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
  Downloading https://files.pythonhosted.org/packages/80/2b/ed30c7941731231afb7d3e97368accd2319047123c75fa7dd043ca39be04/awscli-1.15.59-py2.py3-none-any.whl (1.3MB)
    0% |▎                               | 10kB 11.7MB/s eta 0:00:01
    1% |▌                               | 20kB 1.8MB/s eta 0:00:01
    2% |▊                               | 30kB 2.1MB/s eta 0:00:01
    3% |█                               | 40kB 1.9MB/s eta 0:00:01
---
  Downloading https://files.pythonhosted.org/packages/db/c8/7dcf9dbcb22429512708fe3a547f8b6101c0d02137acbd892505aee57adf/colorama-0.3.9-py2.py3-none-any.whl
Collecting botocore==1.10.58 (from awscli)
/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
  Downloading https://files.pythonhosted.org/packages/cb/6e/4d961f0c98007ba077a64626f4e0056e5351cca54653b15d12bb03c32110/botocore-1.10.58-py2.py3-none-any.whl (4.4MB)
    0% |                                | 10kB 44.6MB/s eta 0:00:01
    0% |▏                               | 20kB 41.8MB/s eta 0:00:01
    0% |▎                               | 30kB 46.1MB/s eta 0:00:01
    0% |▎                               | 40kB 28.9MB/s eta 0:00:01
---
Check compiletest suite=ui mode=ui (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
[00:48:15] 
[00:48:15] running 1565 tests
[00:48:18] ..................................................................................................i.
[00:48:22] ..........................F.....................................i...................................
[00:48:27] ....................................................................................................
[00:48:29] ....................................................................................................
[00:48:31] ....................................................................................................
[00:48:35] ....................................................................................................
---
[00:49:05] .................................................................
[00:49:05] failures:
[00:49:05] 
[00:49:05] ---- [ui] ui/const-eval/closure_promotion.rs stdout ----
[00:49:05] normalized stderr:
[00:49:05] error[E0597]: borrowed value does not live long enough
[00:49:05]    |
[00:49:05]    |
[00:49:05] LL |     let x: &'static _ = &|| { let z = 3; z }; //~ ERROR does not live long enough
[00:49:05]    |                          ^^^^^^^^^^^^^^^^^^^ temporary value does not live long enough
[00:49:05] LL | }
[00:49:05]    | - temporary value only lives until here
[00:49:05]    |
[00:49:05]    = note: borrowed value must be valid for the static lifetime...
[00:49:05] error: aborting due to previous error
[00:49:05] 
[00:49:05] For more information about this error, try `rustc --explain E0597`.
[00:49:05] 
[00:49:05] 
[00:49:05] 
[00:49:05] 
[00:49:05] The actualive long enough\n```\n\nIn here, `x` is created before `y` and therefore has a greater lifetime. Always\nkeep in mind that values in a scope are dropped in the opposite order they are\ncreated. So to fix the previous example, just make the `y` lifetime greater than\nthe `x`'s one:\n\n```\nstruct Foo<'a> {\n    x: Option<&'a u32>,\n}\n\nlet y = 0;\nlet mut x = Foo { x: None };\nx.x = Some(&y);\n```\n"},"level":"error","spans":[{"file_name":"/checkout/src/test/ui/const-eval/closure_promotion.rs","byte_start":526,"byte_end":545,"line_start":14,"line_end":14,"column_start":26,"column_end":45,"is_primary":true,"text":[{"text":"    let x: &'static _ = &|| { let z = 3; z }; //~ ERROR does not live long enough","highlight_start":26,"highlight_end":45}],"label":"temporary value does not live long enough","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"/checkout/src/test/ui/const-eval/closure_promotion.rs","byte_start":583,"byte_end":584,"line_start":15,"line_end":15,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"}","highlight_start":1,"highlight_end":2}],"label":"temporary value only lives until here","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"borrowed value must be valid for the static lifetime...","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error[E0597]: borrowed value does not live long enough\n  --> /checkout/src/test/ui/const-eval/closure_promotion.rs:14:26\n   |\nLL |     let x: &'static _ = &|| { let z = 3; z }; //~ ERROR does not live long enough\n   |             c/test/ui" "--build-base" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui" "--stage-id" "stage2-x86_64-unknown-linux-gnu" "--mode" "ui" "--target" "x86_64-unknown-linux-gnu" "--host" "x86_64-unknown-linux-gnu" "--llvm-filecheck" "/usr/lib/llvm-5.0/bin/FileCheck" "--host-rustcflags" "-Crpath -O -Zunstable-options " "--target-rustcflags" "-Crpath -O -Zunstable-options  -Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "--docck-python" "/usr/bin/python2.7" "--lldb-python" "/usr/bin/python2.7" "--gdb" "/usr/bin/gdb" "--quiet" "--llvm-version" "5.0.0\n" "--system-llvm" "--cc" "" "--cxx" "" "--cflags" "" "--llvm-components" "" "--llvm-cxxflags" "" "--adb-path" "adb" "--adb-test-dir" "/data/tmp/work" "--android-cross-path" "" "--color" "always"
[00:49:05] 
[00:49:05] 
[00:49:05] failed to run: /checkout/obj/build/bootstrap/debug/bootstrap test
[00:49:05] Build completed unsuccessfully in 0:01:30
[00:49:05] Build completed unsuccessfully in 0:01:30
[00:49:05] make: *** [check] Error 1
[00:49:05] Makefile:58: recipe for target 'check' failed

The command "stamp sh -x -c "$RUN_SCRIPT"" exited with 2.
travis_time:start:03b16890
$ date && (curl -fs --head https://google.com | grep ^Date: | sed 's/Date: //g' || true)

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)

@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.
Check compiletest suite=ui mode=ui (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
[00:43:09] 
[00:43:09] running 1565 tests
[00:43:12] ..................................................................................................i.
[00:43:16] ..........................F..............F..F...................i...................................
[00:43:21] ....................................................................................................
[00:43:23] ....................................................................................................
[00:43:25] ....................................................................................................
[00:43:29] ....................................................................................................
---
[00:43:59] 
[00:43:59] 
[00:43:59] 
[00:43:59] The actual stderr differed from the expected stderr.
[00:43:59] Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/const-eval/closure_promotion/closure_promotion.stderr
[00:43:59] To update references, rerun the tests and pass the `--bless` flag
[00:43:59] To only update this specific test, also pass `--test-args const-eval/closure_promotion.rs`
[00:43:59] error: 1 errors occurred comparing output.
[00:43:59] status: exit code: 101
[00:43:59] status: exit code: 101
[00:43:59] command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/const-eval/closure_promotion.rs" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-testing" "-C" "prefer-dynamic" "-o" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/const-eval/closure_promotion/a" "-Crpath" "-O" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/const-eval/closure_promotion/auxiliary" "-A" "unused"
[00:43:59] ------------------------------------------
[00:43:59] 
[00:43:59] ------------------------------------------
[00:43:59] stderr:
[00:43:59] stderr:
[00:43:59] ------------------------------------------
[00:43:59] {"message":"borrowed value does not live long enough","code":{"code":"E0597","explanation":"\nThis error occurs because a borrow was made inside a variable which has a\ngreater lifetime than the borrowed one.\n\nExample of erroneous code:\n\n```compile_fail,E0597\nstruct Foo<'a> {\n    x: Option<&':43:59] - 
[00:43:59] - error[E0080]: erroneous constant used
[00:43:59] -   --> $DIR/issue-50814-2.rs:26:5
[00:43:59] +    |      ^^^^^^^^^^^^^^^^^^^^^ temporary value does not live long enough
[00:43:59] + LL | //~| ERROR E0080
[00:43:59] + LL | }
[00:43:59] +    | - temporary value only lives until here
[00:43:59] 12    |
[00:43:59] - LL |     &<A<T> as Foo<T>>::BAR //~ ERROR erroneous constant used
[00:43:59] -    |     ^---------------------
[00:43:59] -    |      referenced constant has errors
[00:43:59] -    |      referenced constant has errors
[00:43:59] +    = note: borrowed value must be valid for the static lifetime...
[00:43:59] - error: aborting due to 2 previous errors
[00:43:59] + error: aborting due to previous error
[00:43:59] 19 
[00:43:59] - For more information about this error, try `rustc --explain E0080`.
[00:43:59] - For more information about this error, try `rustc --explain E0080`.
[00:43:59] + For more information about this error, try `rustc --explain E0597`.
[00:43:59] 21 
[00:43:59] 
[00:43:59] 
[00:43:59] The actual stderr differed from the expected stderr.
[00:43:59] Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/const-eval/issue-50814-2/issue-50814-2.stderr
[00:43:59] To update references, rerun the tests and pass the `--bless` flag
[00:43:59] To only update this specific test, also pass `--test-args const-eval/issue-50814-2.rs`
[00:43:59] error: 1 errors occurred comparing output.
[00:43:59] status: exit code: 101
[00:43:59] status: exit code: 101
[00:43:59] command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/const-eval/issue-50814-2.rs" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-test
[00:43:59] Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/const-eval/issue-50814/issue-50814.stderr
[00:43:59] Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/const-eval/issue-50814/issue-50814.stderr
[00:43:59] To update references, rerun the tests and pass the `--bless` flag
[00:43:59] To only update this specific test, also pass `--test-args const-eval/issue-50814.rs`
[00:43:59] error: 1 errors occurred comparing output.
[00:43:59] status: exit code: 101
[00:43:59] status: exit code: 101
[00:43:59] command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/const-eval/issue-50814.rs" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-testing" "-C" "prefer-dynamic" "-o" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/const-eval/issue-50814/a" "-Crpath" "-O" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/const-eval/issue-50814/auxiliary" "-A" "unused"
[00:43:59] ------------------------------------------
[00:43:59] 
[00:43:59] ------------------------------------------
[00:43:59] stderr:
[00:43:59] stderr:
[00:43:59] ------------------------------------------
[00:43:59] {"message":"borrowed value does not live long enough","code":{"code":"E0597","explanation":"\nThis error occurs because a borrow was made inside a variable which has a\ngreater lifetime than the borrowed one.\n\nExample of erroneous code:\n\n```compile_fail,E0597\nstruct Foo<'a> {\n    x: Option<&'a u32>,\n}\n\nlet mut x = Foo { x: None };\nlet y = 0;\nx.x = Some(&y); // error: `y` does not live long enough\n```\n\nIn here, `x` is created before `y` and therefore has a greater lifetime. Always\nkeep in mind that values in a scope are dropped in the opposite order they are\ncreated. So to fix the previous example, just make the `y` lifetime greater than\nthe `x`'s one:\n\n```\nstruct Foo<'a> {\n    x: Option<&'a u32>,\n}\n\nlet y = 0;\nlet mut x = Foo { x: None };\nx.x = Some(&y);\n```\n"},"level":"error","spans":[{"file_name":"/checkout/src/test/ui/const-eval/issue-50814.rs","byte_start":729,"byte_end":746,"line_start":27,"line_end":27,"column_start":6,"column_end":23,"is_primary":true,"text":[{"text":"    &Sum::<U8,U8>::MAX //~ ERROR erroneous constant used","highlight_start":6,"highlight_end":23}],"label":"temporary value does not live long enough","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"/checkout/src/test/ui/const-eval/issue-50814.rs","byte_start":798,"byte_end":799,"line_start":29,"line_end":29,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"}","highlight_start":1,"highlight_end":2}],"label":"temporary value only lives until here","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"borrowed value must be valid for the static lifetime...","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error[E0597]: borrowed value does not live long enough\n  --> /checkout/src/test/ui/const-eval/issue-50814.rs:27:6\n   |\nLL |     &Sum::<U8,U8>::MAX //~ ERROR erroneous constant used\n   |      ^^^^^^^^^^^^^^^^^ temporary value does not live long enough\nLL | //~| ERROR E0080\nLL | }\travis_time:start:1260b680
Sat Jul 14 04:20:59 UTC 2018
Sat, 14 Jul 2018 04:20:59 GMT
travis_time:end:1260b680:start=1531542059044309933,finish=1531542059100745837,duration=56435904

---
travis_time:end:1aae0424:start=1531542060089829469,finish=1531542060110510856,duration=20681387
travis_fold:end:after_failure.4
travis_fold:start:after_failure.5
travis_time:start:2797e47d
$ 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:036d812f
$ 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)

@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.
Check compiletest suite=ui mode=ui (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
[00:47:50] 
[00:47:50] running 1567 tests
[00:47:53] ..................................................................................................i.
[00:47:57] ..........................F.....................................i...................................
[00:48:02] ....................................................................................................
[00:48:05] ....................................................................................................
[00:48:07] ....................................................................................................
[00:48:10] ....................................................................................................
---
[00:48:30] ....................................................................................................
[00:48:33] ....................................................................................................
[00:48:37] ................................................................................i...................
[00:48:40] The actual stderr differed from the expected stderr.
[00:48:40] Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/const-eval/closure_promotion/closure_promotion.stderr
[00:48:40] To update references, rerun the tests and pass the `--bless` flag
[00:48:40] To only update this specific test, also pass `--test-args const-eval/closure_promotion.rs`
[00:48:40] error: 1 errors occurred comparing output.
[00:48:40] status: exit code: 101
[00:48:40] status: exit code: 101
[00:48:40] command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/const-eval/closure_promotion.rs" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-testing" "-C" "prefer-dynamic" "-o" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/const-eval/closure_promotion/a" "-Crpath" "-O" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/const-eval/closure_promotion/auxiliary" "-A" "unused"
[00:48:40] ------------------------------------------
[00:48:40] 
[00:48:40] ------------------------------------------
[00:48:40] stderr:
[00:48:40] stderr:
[00:48:40] ------------------------------------------
[00:48:40] {"message":"borrowed value does not live long enough","code":{"code":"E0597","explanation":"\nThis error occurs because a borrow was made inside a variable which has a\ngreater lifetime than the borrowed one.\n\nExample of erroneous code:\n\n```compile_fail,E0597\nstruct Foo<'a> {\n    x: Option<&'a u32>,\n}\n\nlet mut x = Foo { x: None };\nlet y = 0;\nx.x = Some(&y); // error: `y` does not live long enough\n```\n\nIn here, `x` is created before `y` and therefore has a greater lifetime. Always\nkeep in mind that values in a scope are dropped in the opposite order they are\ncreated. So to fix the previous example, just make the `y` lifetime greater than\nthe `x`'s one:\n\n```\nstruct Foo<'a> {\n    x: Option<&'a u32>,\n}\n\nlet y = 0;\nlet mut x = Foo { x: None };\nx.x = Some(&y);\n```\n"},"level":"error","spans":[{"file_name":"/checkout/src/test/ui/const-eval/closure_promotion.rs","byte_start":526,"byte_end":545,"line_start":14,"line_end":14,"column_start":26,"column_end":45,"is_primary":true,"text":[{"text":"    let x: &'static _ = &|| { let z = 3; z }; //~ ERROR does not live long enough","highlight_start":26,"highlight_end":45}],"label":"temporary value does not live long enough","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"/checkout/src/test/ui/const-eval/closure_promotion.rs","byte_start":583,"byte_end":584,"line_start":15,"line_end":15,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"}","highlight_start":1,"highlight_end":2}],"label":"temporary value only lives until here","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"borrowed value must be valid for the static lifetime...","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error[E0597]: borrowed value does not live long enough\n  --> /checkout/src/test/ui/const-eval/closure_promotion.rs:14:26\n   |\nLL |     let x: &'static _ = &|| { let z = 3; z }; //~ ERROR does not live long enough\n   |                          ^^^^^^^^^^^^^^^^^^^ temporary value does not live long enough\nLL | }\n   | - temporary value only lives until here\n   |\n   = note: borrowed value must be valid for the static lifetime...\n\n"}
[00:48:40] {"message":"aborting due to previous error","code":null,"level":"error","spans":[],"children":[],"rendered":"error: aborting due to previous error\n\n"}
[00:48:40] {"message":"For more information about this error, try `rustc --explain E0597`.","code":null,"level":"","spans":[],"children":[],"rendered":"For more information about this error, try `rustc --explain E0597`.\n"}
[00:48:40] ------------------------------------------
[00:48:40] 
[00:48:40] thread '[ui] ui/const-eval/closure_promotion.rs' panicked at 'explicit panic', tools/compiletest/src/runtest.rs:3162:9
[00:48:40] note: Run with `RUST_BACKTRACE=1` for a backtrace.
---
[00:48:40] 
[00:48:40] thread 'main' panicked at 'Some tests failed', tools/compiletest/src/main.rs:498:22
[00:48:40] 
[00:48:40] 
[00:48:40] 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-gnu/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-gnu" "--mode" "ui" "--target" "x86_64-unknown-linux-gnu" "--host" "x86_64-unknown-linux-gnu" "--llvm-filecheck" "/usr/lib/llvm-5.0/bin/FileCheck" "--host-rustcflags" "-Crpath -O -Zunstable-options " "--target-rustcflags" "-Crpath -O -Zunstable-options  -Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "--docck-python" "/usr/bin/python2.7" "--lldb-python" "/usr/bin/python2.7" "--gdb" "/usr/bin/gdb" "--quiet" "--llvm-version" "5.0.0\n" "--system-llvm" "--cc" "" "--cxx" "" "--cflags" "" "--llvm-components" "" "--llvm-cxxflags" "" "--adb-path" "adb" "--adb-test-dir" "/data/tmp/work" "--android-cross-path" "" "--color" "always"
[00:48:40] 
[00:48:40] 
[00:48:40] failed to run: /checkout/obj/build/bootstrap/debug/bootstrap test
[00:48:40] Build completed unsuccessfully in 0:01:29
[00:48:40] Build completed unsuccessfully in 0:01:29
[00:48:40] Makefile:58: recipe for target 'check' failed
[00:48:40] make: *** [check] Error 1
125372 ./obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/deps
122684 ./obj/build/x86_64-unknown-linux-gnu/stage0-bootstrap-tools/x86_64-unknown-linux-gnu/release/deps
107620 ./src/llvm/test/CodeGen
107600 ./obj/build/x86_64-unknown-linux-gnu/stage1-std/x86_64-unknown-linux-gnu

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)

}

fn visit_block(&mut self, block: &'tcx hir::Block) {
fn check_block(&mut self, block: &'tcx hir::Block) -> Promotability {
debug!("e.node: {:#?}", block);
Copy link
Contributor

Choose a reason for hiding this comment

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

Remove this AST-printing message

@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.
Check compiletest suite=ui mode=ui compare_mode=nll (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
[00:45:59] 
[00:45:59] running 1567 tests
[00:46:02] ..................................................................................................i.
[00:46:06] .............................F..................................i...................................
[00:46:11] ....................................................................................................
[00:46:14] ....................................................................................................
[00:46:16] ....................................................................................................
[00:46:19] ....................................................................................................
---
[00:46:48] 
[00:46:48] thread 'main' panicked at 'Some tests failed', tools/compiletest/src/main.rs:498:22
[00:46:48] 
[00:46:48] 
[00:46:48] 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-gnu/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-gnu" "--mode" "ui" "--target" "x86_64-unknown-linux-gnu" "--host" "x86_64-unknown-linux-gnu" "--llvm-filecheck" "/usr/lib/llvm-5.0/bin/FileCheck" "--host-rustcflags" "-Crpath -O -Zunstable-options " "--target-rustcflags" "-Crpath -O -Zunstable-options  -Lnative=/checkout1.5G  284K  1.5G   1% /run
none            4.0K     0  4.0K   0% /sys/fs/cgroup
none            5.0M     0  5.0M   0% /run/lock
none            7.4G     0  7.4G   0% /run/shm
none            100M     0  100M   0% /run/user
---
143820 ./obj/build/x86_64-unknown-linux-gnu/stage1-std
136548 ./obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu
136544 ./obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release
130340 ./obj/build/bootstrap/debug/incremental/bootstrap-3kaq1kqcanyi4
130336 ./obj/build/bootstrap/debug/incremental/bootstrap-3kaq1kqcanyi4/s-f2wf96hpp8-186d7sn-1i9mqtv27979p
129736 ./obj/build/x86_64-unknown-linux-gnu/stage0-bootstrap-tools/x86_64unknown-linux-gnu/stage0-rustc
53520 ./obj/build/x86_64-unknown-linux-gnu/stage2-tools/x86_64-unknown-linux-gnu
53516 ./obj/build/x86_64-unknown-linux-gnu/stage2-tools/x86_64-unknown-linux-gnu/release
53136 ./obj/build/x86_64-unknown-linux-gnu/stage0/bin

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)

@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.
Check compiletest suite=ui mode=ui compare_mode=nll (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
[00:45:20] 
[00:45:20] running 1567 tests
[00:45:24] ..................................................................................................i.
[00:45:28] .............................F..................................i...................................
[00:45:32] ....................................................................................................
[00:45:35] ....................................................................................................
[00:45:37] ....................................................................................................
[00:45:40] ....................................................................................................
---
[00:46:08] 
[00:46:08] thread 'main' panicked at 'Some tests failed', tools/compiletest/src/main.rs:498:22
[00:46:08] 
[00:46:08] 
[00:46:08] 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-gnu/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-gnu" "--mode" "ui" "--target" "x86_64-unknown-linux-gnu" "--host" "x86_64-unknown-linux-gnu" "--llvm-filecheck" "/usr/lib/llvm-5.0/bin/FileCheck" "--host-rustcflags" "-Crpath -O -Zunstable-options " "--target-rustcflags" "-Crpath -O -Zunstable-options  -Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "--docck-python" "/usr/bin/python2.7" "--lldb-python" "/usr/bin/python2.7" "--gdb" "/usr/bin/gdb" "--quiet" "--llvm-version" "5.0.0\n" "--system-llvm" "--cc" "" "--cxx" "" "--cflags" "" "--llvm-components" "" "--llvm-cxxflags" "" "--adb-path" "adb" "--adb-test-dir" "/data/tmp/work" "--android-cross-path" "" "--color" "always" "--compare-mode" "nll"
[00:46:08] 
[00:46:08] 
[00:46:08] failed to run: /checkout/obj/build/bootstrap/debug/bootstrap test
[00:46:08] Build completed unsuccessfully in 0:02:13
[00:46:08] Build completed unsuccessfully in 0:02:13
[00:46:08] make: *** [check] Error 1
[00:46:08] Makefile:58: recipe for target 'check' failed

The command "stamp sh -x -c "$RUN_SCRIPT"" exited with 2.
travis_time:start:0038e42b
$ date && (curl -fs --head https://google.com | grep ^Date: | sed 's/Date: //g' || true)

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)

…ith the structs Promotable and NotPromotable.
@oli-obk
Copy link
Contributor

oli-obk commented Jul 14, 2018

@bors r+

@bors
Copy link
Contributor

bors commented Jul 14, 2018

📌 Commit 07faca9 has been approved by oli-obk

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

bors commented Jul 14, 2018

⌛ Testing commit 07faca9 with merge 49f1e5d...

bors added a commit that referenced this pull request Jul 14, 2018
Removed the promotable field from CheckCrateVisitor...

and replaced it with the custom enum Promotability.

r? @oli-obk
@bors
Copy link
Contributor

bors commented Jul 15, 2018

☀️ Test successful - status-appveyor, status-travis
Approved by: oli-obk
Pushing 49f1e5d to master...

@bors bors merged commit 07faca9 into rust-lang:master Jul 15, 2018
mut_rvalue_borrows: NodeSet,
param_env: ty::ParamEnv<'tcx>,
identity_substs: &'tcx Substs<'tcx>,
tables: &'a ty::TypeckTables<'tcx>,
result: ItemLocalSet,
}

#[must_use]
#[derive(Debug, PartialEq)]
enum Promotability {
Copy link
Member

Choose a reason for hiding this comment

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

Maybe this should be exported and used instead of bool elsewhere in the compiler.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Are there any other things I'd need to implement (like BitAnd and BitOr) to cover the rest of the compiler?

Copy link
Member

Choose a reason for hiding this comment

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

I think BitOr should be removed, but otherwise you'd likely just have to try and see.


_ => {
v.promotable = false;
promotable | v.type_promotability(node_ty)
Copy link
Member

Choose a reason for hiding this comment

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

This is the only place | is used, since misusable. Also, the method was named type_has_only_promotable_values before, which suggests it's impossible to create an unpromotable value of that type. type_promotability is a bit more general but it does highlight a point: this code is probably wrong.

@oli-obk this should probably not be relaxed like this. You might need to reintroduced bitflags to indicate the reason for unpromotability Q_Q. (i.e. you can remove INTERIOR_MUT and NEEDS_DROP flags based on the type but you can't remove anything pertaining to "creates values that cannot be operated on correctly").

Copy link
Contributor

Choose a reason for hiding this comment

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

I have a feeling we discussed this before and it ended up being a breaking change to change this.

"has only promotable values" made sense pre-miri. Not so much afterwards.

This is pretty much the topic I'm addressing in #51570

Copy link
Member

Choose a reason for hiding this comment

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

I so wish we could just throw away the old borrow-checker and avoid all the lingering complexity...

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.

5 participants