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

convert NLL ops to caches #51538

Merged
merged 72 commits into from
Jun 28, 2018
Merged

Conversation

nikomatsakis
Copy link
Contributor

@nikomatsakis nikomatsakis commented Jun 13, 2018

This is a extension of #51460. It uses a lot more caching than we used to do. This caching is not yet as efficient as it could be, but I'm curious to see the current perf results.

This is the high-level idea: in the MIR type checker, use canonicalized queries for all the major operations. This is helpful because the MIR type check is operating in a context where all types are fully known (mostly, anyway) but regions are completely renumbered. This means we often wind up with duplicate queries like Foo<'1, '2> :Bar and Foo<'3, '4>: Bar. Canonicalized queries let us re-use the results. By the final commit in this PR, we can essentially just "read off" the resulting region relations and add them to the NLL type check.

@rust-highfive
Copy link
Collaborator

r? @petrochenkov

(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 Jun 13, 2018
@nikomatsakis
Copy link
Contributor Author

@bors try

@bors
Copy link
Contributor

bors commented Jun 13, 2018

⌛ Trying commit 7aa36ed446038319115b1a3cf70cf67ef221dc92 with merge adbbd12ea685afa27f98c032745585bb98f42e81...

@nikomatsakis
Copy link
Contributor Author

cc @Mark-Simulacrum — if you get a chance, once the try run is complete, can you off a perf run? (I will try to ping you again when that has happened...)

@Mark-Simulacrum
Copy link
Member

I've queued the perf build, I think it'll start late enough to be in time for try to complete.

@bors
Copy link
Contributor

bors commented Jun 13, 2018

☀️ Test successful - status-travis
State: approved= try=True

@nikomatsakis
Copy link
Contributor Author

Results show a decent win, though not (yet!) where I hope to get it:

@petrochenkov
Copy link
Contributor

r? @pnkfelix

@nikomatsakis nikomatsakis force-pushed the nll-perf-examination branch 4 times, most recently from 40e3e02 to d3115ab Compare June 21, 2018 09:56
@rust-highfive
Copy link
Collaborator

The job x86_64-gnu-llvm-3.9 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:44:54] ....................................................................................................
[00:44:58] ....................................................................................................
[00:45:01] ....................................................................................................
[00:45:04] ....................................................................................................
[00:45:09] ..............................................................................F.....................
[00:45:19] ....................................................................................................
[00:45:25] ....................................................................................................
[00:45:30] ......i...............................................................................i.............
[00:45:35] ....................................................................................................
[00:45:35] ....................................................................................................
[00:45:41] ....................................................................................................
[00:45:47] ....................................................................................................
[00:45:53] .....................i..............................................................................
Iterator>::Item
[00:45:53] +    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::iter::Step` is not implemented for `impl std::fmt::Debug`
[00:45:53] +    |
[00:45:53] +    = note: required because of the requirements on the impl of `std::iter::Iterator` for `std::ops::Range<impl std::fmt::Debug>`
[00:45:53] + error: aborting due to 8 previous errors
[00:45:53] + 
[00:45:53] + Some errors occurred: E0223, E0277, E0308, E0667.
[00:45:53] 36 For more information about an error, try `rustc --explain E0223`.
[00:45:53] 36 For more information about an error, try `rustc --explain E0223`.
[00:45:53] 37 
[00:45:53] 
[00:45:53] 
[00:45:53] The actual stderr differed from the expected stderr.
[00:45:53] Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/impl_trait_projections/impl_trait_projections.stderr
[00:45:53] To update references, rerun the tests and pass the `--bless` flag
[00:45:53] To only update this specific test, also pass `--test-args impl_trait_projections.rs`
[00:45:53] error: 1 errors occurred comparing output.
[00:45:53] status: exit code: 101
[00:45:53] status: exit code: 101
[00:45:53] command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/impl_trait_projections.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/impl_trait_projections/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/impl_trait_projections/auxiliary" "-A" "unused"
[00:45:53] ------------------------------------------
[00:45:53] 
[00:45:53] ------------------------------------------
[00:45:53] stderr:
[00:45:53] stderr:
[00:45:53] ------------------------------------------
[00:45:53] {"message":"`impl Trait` is not allowed in path parameters","code":{"code":"E0667","explanation":null},"level":"error","spans":[{"file_name":"/checkout/src/test/ui/impl_trait_projections.rs","byte_start":720,"byte_end":733,"line_start":21,"line_end":21,"column_start":51,"column_end":64,"is_primary":true,"text":[{"text":"fn projection_is_disallowed(x: impl Iterator) -> <impl Iterator>::Item {","highlight_start":51,"highlight_end":64}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"error[E0667]: `impl Trait` is not allowed in path parameters\n  --> /checkout/src/test/ui/impl_trait_projections.rs:21:51\n   |\nLL | fn projection_is_disallowed(x: impl Iterator) -> <impl Iterator>::Item {\n   |                                                   ^^^^^^^^^^^^^\n\n"}
[00:45:53] {"message":"`impl Trait` is not allowed in path parameters","code":{"code":"E0667","explanation":null},"level":"error","spans":[{"file_name":"/checkout/src/test/ui/impl_trait_projections.rs","byte_start":935,"byte_end":948,"line_start":28,"line_end":28,"column_start":9,"column_end":22,"is_primary":true,"text":[{"text":"    -> <impl Iterator as Iterator>::Item","highlight_start":9,"highlight_end":22}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"error[E0667]: `impl Trait` is not allowed in path parameters\n  --> /checkout/src/test/ui/impl_trait_projections.rs:28:9\n   |\nLL |     -> <impl Iterator as Iterator>::Item\n   |         ^^^^^^^^^^^^^\n\n"}
[00:45:53] {"message":"`impl Trait` is not allowed in path parameters","code":{"code":"E0667","explanation":null},"level":"error","spans":[{"file_name":"/checkout/src/test/ui/impl_trait_projections.rs","byte_start":1138,"byte_end":1148,"line_start":35,"line_end":35,"column_start":27,"column_end":37,"is_primary":true,"text":[{"text":"    -> <::std::ops::Range<impl Debug> as Iterator>::Item","highlight_start":27,"highlight_end":37}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"error[E0667]: `impl Trait` is not allowed in path parameters\n  --> /checkout/src/test/ui/impl_trait_projections.rs:35:27\n   |\nLL |     -> <::std::ops::Range<impl Debug> as Iterator>::Item\n   |                           ^^^^^^^^^^\n\n"}
[00:45:53] {"message":"`impl Trait` is not allowed in path parameters","code":{"code":"E0667","explanation":null},"level":"error","spans":[{"file_name":"/checkout/src/test/ui/impl_trait_projections.rs","byte_start":1355,"byte_end":1365,"line_start":42,"line_end":42,"column_start":29,"column_end":39,"is_primary":true,"text":[{"text":"    -> <dyn Iterator<Item = impl Debug> as Iterator>::Item","highlight_start":29,"highlight_end":39}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"error[E0667]: `impl Trait` is not allowed in path parameters\n  --> /checkout/src/test/ui/impl_trait_projections.rs:42:29\n   |\nLL |     -> <dyn Iterator<Item = impl DeE0277\nfn some_func<T>(foo: T) {\n    println!(\"{:?}\", foo); // error: the trait `core::fmt::Debug` is not\n                           //        implemented for the type `T`\n}\n\nfn main() {\n    // We now call the method with the i32 type,\n    // which *does* implement the Debug trait.\n    some_func(5i32);\n}\n```\n\nNote that the error here is in the definition of the generic function: Although\nwe only call it with a parameter that does implement `Debug`, the compiler\nstill rejects the function: It must work with all possible input types. In\norder to make this example compile, we need to restrict the generic type we're\naccepting:\n\n```\nuse std::fmt;\n\n// Restrict the input type to types that implement Debug.\nfn some_func<T: fmt::Debug>(foo: T) {\n    println!(\"{:?}\", foo);\n}\n\nfn main() {\n    // Calling the method is still fine, as i32 implements Debug.\n    some_func(5i32);\n\n    // This would fail to compile now:\n    // struct WithoutDebug;\n    // some_func(WithoutDebug);\n}\n```\n\nRust only looks at the signature of the called function, as such it must\nalready specify all requirements that will be used for every type parameter.\n"},"level":"error","spans":[{"file_name":"/checkout/src/test/ui/impl_trait_projections.rs","byte_start":1227,"byte_end":1262,"line_start":37,"line_end":39,"column_start":1,"column_end":2,"is_primary":true,"text":[{"text":"{","highlight_start":1,"highlight_end":2},{"text":"    (1i32..100).next().unwrap()","highlight_start":1,"highlight_end":32},{"text":"}","highlight_start":1,"highlight_end":2}],"label":"the trait `std::iter::Step` is not implemented for `impl std::fmt::Debug`","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"required because of the requirements on the impl of `std::iter::Iterator` for `std::ops::Range<impl std::fmt::Debug>`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error[E0277]: the trait bound `impl std::fmt::Debug: std::iter::Step` is not satisfied\n  --> /checkout/src/test/ui/impl_trait_projections.rs:37:1\n   |\nLL | / {\nLL | |     (1i32..100).next().unwrap()\nLL | | }\n   | |_^ the trait `std::iter::Step` is not implemented for `impl std::fmt::Debug`\n   |\n   = note: required because of the requirements on the impl of `std::iter::Iterator` for `std::ops::Range<impl std::fmt::Debug>`\n\n"}
[00:45:53] {"message":"mismatched types","code":{"code":"E0308","explanation":"\nThis error occurs when the compiler was unable to infer the concrete type of a\nvariable. It can occur for several cases, the most common of which is a\nmismatch in the expected type that the compiler inferred for a variable's\ninitializing expression, and the actual type explicitly assigned to the\nvariable.\n\nFor example:\n\n```compile_fail,E0308\nlet x: i32 = \"I am not a number!\";\n//     ~~~   ~~~~~~~~~~~~~~~~~~~~\n//      |             |\n//      |    initializing expression;\n//      |    compiler infers type `&str`\n//      |\n//    type `i32` assigned to variable `x`\n```\n"},"level":"error","spans":[{"file_name":"/checkout/src/test/ui/impl_trait_projections.rs","byte_start":1233,"byte_end":1260,"line_start":38,"line_end":38,"column_start":5,"column_end":32,"is_primary":true,"text":[{"text":"    (1i32..100).next().unwrap()","highlight_start":5,"highlight_end":32}],"label":"expected anonymized type, found i32","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"expected type `impl std::fmt::Debug`\n   found type `i32`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error[E0308]: mismatched types\n  --> /checkout/src/test/ui/impl_trait_projections.rs:38:5\n   |\nLL |     (1i32..100).next().unwrap()\n   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected anonymized type, found i32\n   |\n   = note: expected type `impl std::fmt::Debug`\n              found type `i32`\n\n"}
[00:45:53] {"message":"the trait bound `impl std::fmt::Debug: std::iter::Step` is not satisfied","code":{"code":"E0277","explanation":"\nYou tried to use a type which doesn't implement some trait in a place which\nexpected that trait. Erroneous code example:\n\n```compile_fail,E0277\n// here we declare the Foo trait with a bar method\ntrait Foo {\n    fn bar(&self);\n}\n\n// we now declare a function which takes an object implementing the Foo trait\nfn some_func<T: Foo>(foo: T) {\n    foo.bar();\n}\n\nfn main() {\n    // we now call the method with the i32 type, which doesn't implement\n    // the Foo trait\n    some_func(5i32); // error: the trait bound `i32 : Foo` is not satisfied\n}\n```\n\nIn order to fix this error, verify that the type you're using does implement\nthe trait. Example:\n\n```\ntrait Foo {\n    fn bar(&self);\n}\n\nfn some_func<T: Foo>(foo: T) {\n    foo.bar(); // we can now use this method since i32 implements the\n               // Foo trait\n}\n\n// we implk" "--android-cross-path" "" "--color" "always"
[00:45:53] 
[00:45:53] 
[00:45:53] failed to run: /checkout/obj/build/bootstrap/debug/bootstrap test
[00:45:53] Build completed unsuccessfully in 0:02:02
[00:45:53] Build completed unsuccessfully in 0:02:02
[00:45:53] Makefile:58: recipe for target 'check' failed
[00:45:53] make: *** [check] Error 1

The command "stamp sh -x -c "$RUN_SCRIPT"" exited with 2.
travis_time:start:007e2d1e
$ date && (curl -fs --head https://google.com | grep ^Date: | sed 's/Date: //g' || true)
---
144560 ./obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu
144556 ./obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release
137996 ./obj/build/bootstrap/debug/incremental
123424 ./obj/build/bootstrap/debug/incremental/bootstrap-3ro763qrbnb6h
123420 ./obj/build/bootstrap/debug/incremental/bootstrap-3ro763qrbnb6h/s-f26t7krk9t-6a80so-xcsc5o6cxe7j
107596 ./obj/build/x86_64-unknown-linux-gnu/stage1-std/x86_64-unknown-linux-gnu/release
103648 ./obj/build/x86_64-unknown-linux-gnu/stage0/lib/rustlib/x86_64-unknown-linux-gnu/codegen-backends
102844 ./obj/build/x86_64-unknown-linux-gnu/stage0-tools/x86_64-unknown-linux-gnu
102840 ./obj/build/x86_64-unknown-linux-gnu/stage0-tools/x86_64-unknown-linux-gnu/release

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)

@nikomatsakis nikomatsakis force-pushed the nll-perf-examination branch 3 times, most recently from 30b3ad8 to 9e67309 Compare June 25, 2018 20:02
@nikomatsakis
Copy link
Contributor Author

@bors try

@bors
Copy link
Contributor

bors commented Jun 25, 2018

⌛ Trying commit 9e67309 with merge ec0e4bb...

bors added a commit that referenced this pull request Jun 25, 2018
[WIP] Convert NLL ops to caches

This is a extension of <#51460>. It uses a lot more caching than we used to do. This caching is not yet as efficient as it could be, but I'm curious to see the current perf results.
@nikomatsakis nikomatsakis changed the title [WIP] Convert NLL ops to caches convert NLL ops to caches Jun 25, 2018
@nikomatsakis
Copy link
Contributor Author

This PR is -- I believe -- at a pretty decent state. x.py test builds locally for me, and I think it should be a pretty tidy perf win (but let's see what bors try thinks). There is still follow-up work to do (and in particular I think that the futures test etc may still be broken under NLL)

@nikomatsakis
Copy link
Contributor Author

(Once the try build completes, I would like to get a perf run.)

@nikomatsakis
Copy link
Contributor Author

r? @eddyb

@pnkfelix is currently not available, so I'm converting over to @eddyb. Not sure who else would be a good reviewer for this.

@rust-highfive rust-highfive assigned eddyb and unassigned pnkfelix Jun 25, 2018
let ProvePredicate {
param_env,
predicate,
} = key;
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 written differently than subtype/eq (i.e. not unpacking in closure args), why?.

ObligationCause::dummy(),
param_env,
predicate,
)],
Copy link
Member

Choose a reason for hiding this comment

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

Interesting, I would've expected you to pass fulfill_cx to the closure instead.

Copy link
Member

Choose a reason for hiding this comment

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

Oookay turns out GitHub deleted replies to comments... I was only wanting to move it.

@nikomatsakis replied to the original version of this (found in my email):

Hmm. That's not a bad idea. I've been trying to encapsulate the FulfillmentContext to some degree, since it's part of the "old trait system" and not really a part of the new one, and for most of the methods they have an InferOk all setup to return. But the inefficiency here does annoy me so....

@rust-lang rust-lang deleted a comment from nikomatsakis Jun 27, 2018
@rust-highfive
Copy link
Collaborator

The job x86_64-gnu-llvm-3.9 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:05:05] travis_fold:start:tidy
travis_time:start:tidy
tidy check
[00:05:06] tidy error: /checkout/src/librustc/traits/query/type_op/outlives.rs:39: line longer than 100 chars
[00:05:06] tidy error: /checkout/src/librustc/traits/query/type_op/subtype.rs:36: line longer than 100 chars
[00:05:06] tidy error: /checkout/src/librustc/traits/query/type_op/normalize.rs:39: line longer than 100 chars
[00:05:06] tidy error: /checkout/src/librustc/traits/query/type_op/eq.rs:32: line longer than 100 chars
[00:05:06] tidy error: /checkout/src/librustc/traits/query/type_op/prove_predicate.rs:34: line longer than 100 chars
[00:05:06] tidy error: /checkout/src/librustc/traits/query/type_op/mod.rs:48: line longer than 100 chars
[00:05:07] some tidy checks failed
[00:05:07] 
[00:05:07] 
[00:05:07] 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:05:07] 
[00:05:07] 
[00:05:07] failed to run: /checkout/obj/build/bootstrap/debug/bootstrap test src/tools/tidy
[00:05:07] Build completed unsuccessfully in 0:01:54
[00:05:07] Build completed unsuccessfully in 0:01:54
[00:05:07] Makefile:79: recipe for target 'tidy' failed
[00:05:07] make: *** [tidy] Error 1

The command "stamp sh -x -c "$RUN_SCRIPT"" exited with 2.
travis_time:start:0002b818
$ date && (curl -fs --head https://google.com | grep ^Date: | sed 's/Date: //g' || true)
---
travis_time:end:0c8d2a91:start=1530124523588195390,finish=1530124523593770163,duration=5574773
travis_fold:end:after_failure.3
travis_fold:start:after_failure.4
travis_time:start:042229ee
$ 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:1c149576
$ 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-3.9 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:05:32] travis_fold:start:tidy
travis_time:start:tidy
tidy check
[00:05:32] tidy error: /checkout/src/librustc/traits/query/type_op/outlives.rs:37: line longer than 100 chars
[00:05:32] tidy error: /checkout/src/librustc/traits/query/type_op/eq.rs:30: line longer than 100 chars
[00:05:32] tidy error: /checkout/src/librustc/traits/query/type_op/prove_predicate.rs:33: line longer than 100 chars
[00:05:34] some tidy checks failed
[00:05:34] 
[00:05:34] 
[00:05:34] 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:05:34] 
[00:05:34] 
[00:05:34] failed to run: /checkout/obj/build/bootstrap/debug/bootstrap test src/tools/tidy
[00:05:34] Build completed unsuccessfully in 0:02:02
[00:05:34] Build completed unsuccessfully in 0:02:02
[00:05:34] make: *** [tidy] Error 1
[00:05:34] Makefile:79: recipe for target 'tidy' failed

The command "stamp sh -x -c "$RUN_SCRIPT"" exited with 2.
travis_time:start:0486b058
$ date && (curl -fs --head https://google.com | grep ^Date: | sed 's/Date: //g' || true)
---
travis_time:end:0287915c:start=1530127503233270638,finish=1530127503239169133,duration=5898495
travis_fold:end:after_failure.3
travis_fold:start:after_failure.4
travis_time:start:0346bb20
$ 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:03a1e74c
$ 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)

@eddyb
Copy link
Member

eddyb commented Jun 27, 2018

r=me with #51538 (comment) (passing fullfill_cx) addressed

@rust-highfive
Copy link
Collaborator

The job x86_64-gnu-llvm-3.9 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:05:23] travis_fold:start:tidy
travis_time:start:tidy
tidy check
[00:05:24] tidy error: /checkout/src/librustc/traits/query/type_op/eq.rs:30: line longer than 100 chars
[00:05:24] tidy error: /checkout/src/librustc/traits/query/type_op/prove_predicate.rs:31: line longer than 100 chars
[00:05:25] some tidy checks failed
[00:05:25] 
[00:05:25] 
[00:05:25] 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:05:25] 
[00:05:25] 
[00:05:25] failed to run: /checkout/obj/build/bootstrap/debug/bootstrap test src/tools/tidy
[00:05:25] Build completed unsuccessfully in 0:02:00
[00:05:25] Build completed unsuccessfully in 0:02:00
[00:05:25] make: *** [tidy] Error 1
[00:05:25] Makefile:79: recipe for target 'tidy' failed

The command "stamp sh -x -c "$RUN_SCRIPT"" exited with 2.
travis_time:start:052e86ac
$ date && (curl -fs --head https://google.com | grep ^Date: | sed 's/Date: //g' || true)
---
travis_time:end:004d2128:start=1530129231175073385,finish=1530129231181769909,duration=6696524
travis_fold:end:after_failure.3
travis_fold:start:after_failure.4
travis_time:start:00b9b42b
$ 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:16e5b99c
$ 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)

@nikomatsakis
Copy link
Contributor Author

@bors r=eddyb

@bors
Copy link
Contributor

bors commented Jun 27, 2018

📌 Commit 1523de3 has been approved by eddyb

@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 Jun 27, 2018
@nikomatsakis
Copy link
Contributor Author

@bors p=1

kind of critical for NLL

@bors
Copy link
Contributor

bors commented Jun 28, 2018

⌛ Testing commit 1523de3 with merge 99a9d68...

bors added a commit that referenced this pull request Jun 28, 2018
convert NLL ops to caches

This is a extension of <#51460>. It uses a lot more caching than we used to do. This caching is not yet as efficient as it could be, but I'm curious to see the current perf results.

This is the high-level idea: in the MIR type checker, use [canonicalized queries](https://rust-lang-nursery.github.io/rustc-guide/traits/canonical-queries.html) for all the major operations. This is helpful because the MIR type check is operating in a context where all types are fully known (mostly, anyway) but regions are completely renumbered. This means we often wind up with duplicate queries like `Foo<'1, '2> :Bar` and `Foo<'3, '4>: Bar`. Canonicalized queries let us re-use the results. By the final commit in this PR, we can essentially just "read off" the resulting region relations and add them to the NLL type check.
@bors
Copy link
Contributor

bors commented Jun 28, 2018

☀️ Test successful - status-appveyor, status-travis
Approved by: eddyb
Pushing 99a9d68 to master...

@bors bors merged commit 1523de3 into rust-lang:master Jun 28, 2018
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.

7 participants