Description
Sub-issue of #48879
Currently, if you have a ui test src/test/ui/foo.rs
that signals a diagnostic error under the AST borrowck, but has no error under the NLL borrowck, then there is no way to make a foo.nll.stderr
or foo.nll.stdout
such that running compiletest --compare-mode=nll
will accept it.
The reason: compiletest
complains that the compilation itself was successful, and by default, all ui tests are assumed to signal a compilation failure.
The usual way such a case (of a test that compiles without an error) is handled in compiletest
is to add a comment of the form // run-pass
in the test itself. But we do not want the tests to be marked as always passing; they only pass under the special mode (NLL in this case) that is still under development in the compiler itself.
There are a number of reasonable ways of addressing this.
- We could modify such tests to ensure that
they end with a functiontheirfn main
is tagged with#[rustc_error]
, so that they will never successfully compile. - We could attempt to have some way to encode a mode-predicated run-pass marker, e.g.
// [nll] run-pass
. - We could have
compiletest
infer that a test, when running under compare-mode, must have an implicit// run-pass
marker, if there exists afoo.mode.stdout
file (even an empty one).
I'm not such a big fan of options 1 or 2 because I like the fact that (so far) compare-mode does not have to impact the existing .rs
nor .stderr
/.stdout
files; you just add your alternative .nll.stderr
file and no one else is the wiser.
So currently I would like us to adopt option 3 (or some other option I haven't thought of yet) that allows the .rs
/.stderr
/.stdout
to go on oblivious to the existence of compare-mode.
But, in the short term, to let us get work done, I plan to follow option 1 for all existing ui/
tests. (This is intended to be a temporary hack; all such uses of this hack should point back to this issue.)
Activity
Workaround rust-lang#49855 by forcing rustc_error in any mode, includ…
Auto merge of #49861 - pnkfelix:compare-mode-nll-followup-2, r=nikoma…
run-pass
tests under compare-mode=nll #53764pnkfelix commentedon Sep 14, 2018
GIven that the compiler team is talking about broader revisions to our test suites (e.g. turning them all into
ui
tests, and more consistently embedding meta-data like// run-pass
into the headers of the tests themselves), I am now more inclined towards adopting option 2 above to resolve this in the long term:steveklabnik commentedon Oct 21, 2019
Triage; not aware of changes here, though this is a part of the repo that I'm not particularly familiar with.
jieyouxu commentedon Oct 17, 2024
compiletest triage: unclear what the current situation is, will need better understanding of compiler/types contributor workflows.