23036 Commits

Author SHA1 Message Date
Andrew Kelley
22d94eaf32 disable std lib unit tests that hard code port numbers
See tracking issue #14907
2023-03-15 10:48:15 -07:00
Andrew Kelley
2b0929929d std.Build.Cache: handle ENOENT on createFile race
There are no dir components, so you would think that this was
unreachable, however we have observed on macOS two processes racing
to do openat() with O_CREAT manifest in ENOENT.
2023-03-15 10:48:15 -07:00
Andrew Kelley
bde1293093 CLI: remove the experimental --watch flag
The compiler REPL will move to an external process that communicates
with the compiler over the binary protocol.
2023-03-15 10:48:15 -07:00
Andrew Kelley
0f88ad8c72 std.Build.CompileStep: proper step dependency on headers
Rather than calling make() from within make().
2023-03-15 10:48:15 -07:00
Andrew Kelley
171977dc1c test-cases: fix incorrectly linking libc when backend is llvm
Now link_libc=1 must be used to link with libc, instead of the test
harness assuming that using the llvm backend means additionally linking
with libc.
2023-03-15 10:48:15 -07:00
Andrew Kelley
1dbb616e73 Module: handle incremental update from ZIR with AST errors 2023-03-15 10:48:15 -07:00
Andrew Kelley
e098b287e1 std.fs.File.writevAll: fix behavior for 0-length vectors
The OS layer expects pointer addresses to be inside the application's
address space even if the length is zero. Meanwhile, in Zig, slices may
have undefined pointer addresses when the length is zero. So this
function now modifies the iov_base fields when the length is zero.

This is a companion commit to b4893eb05565b2cb033c6ed88617d73faf878455.
2023-03-15 10:48:15 -07:00
Andrew Kelley
b1299d5153 build runner: tweak progress bar display 2023-03-15 10:48:15 -07:00
Andrew Kelley
a26a2e1a17 build runner: fix compilation errors on windows 2023-03-15 10:48:15 -07:00
Andrew Kelley
fa9108c3d4 add skip_foreign_checks=true on a standalone test 2023-03-15 10:48:15 -07:00
Andrew Kelley
66eb910fe4 remove redundant link test 2023-03-15 10:48:15 -07:00
Andrew Kelley
c5cdc0262b add the new extern test to standalone tests
This was from master branch commit
c93e0d86187cb589d6726acd36f741f3d87a96be. Since standalone test are
completely reworked, I had to resolve the merge conflict later, in this
commit.
2023-03-15 10:48:15 -07:00
Andrew Kelley
149aa9afb7 add a workaround for miscompilation regarding alignment
See tracking issue #14904
2023-03-15 10:48:15 -07:00
Andrew Kelley
bc79328dcf fix endianness when using test-runner in qemu 2023-03-15 10:48:15 -07:00
Andrew Kelley
8e6d46bca5 test runner: remove one superfluous stack frame 2023-03-15 10:48:14 -07:00
Andrew Kelley
a0dd2919eb std.build.RunStep: clean up some leftover mess
* Remove some functions that are no longer needed since
   EmulateableRunStep is gone.
 * Add removeEnvironmentVariable function.
 * Support printing environment variables in --verbose mode.
2023-03-15 10:48:14 -07:00
Andrew Kelley
61d7e31078 remove bad unit test from std lib
This unit test tested the command line arguments which were passed to
the test runner, which is not really something that unit tests are
supposed to observe.

The proper way to test command line argument parsing is with a
standalone test, where the set of command line arguments being tested
for are also being controlled by the test itself.
2023-03-15 10:48:14 -07:00
Andrew Kelley
8a8f148c8c test-stack-trace: set env to disable color
The tests rely on the absence of terminal escape codes.
2023-03-15 10:48:14 -07:00
Andrew Kelley
ede5dcffea make the build runner and test runner talk to each other
std.Build.addTest creates a CompileStep as before, however, this kind of
step no longer actually runs the unit tests. Instead it only compiles
it, and one must additionally create a RunStep from the CompileStep in
order to actually run the tests.

RunStep gains integration with the default test runner, which now
supports the standard --listen=- argument in order to communicate over
stdin and stdout. It also reports test statistics; how many passed,
failed, and leaked, as well as directly associating the relevant stderr
with the particular test name that failed.

This separation of CompileStep and RunStep means that
`CompileStep.Kind.test_exe` is no longer needed, and therefore has been
removed in this commit.

 * build runner: show unit test statistics in build summary
 * added Step.writeManifest since many steps want to treat it as a
   warning and emit the same message if it fails.
 * RunStep: fixed error message that prints the failed command printing
   the original argv and not the adjusted argv in case an interpreter
   was used.
 * RunStep: fixed not passing the command line arguments to the
   interpreter.
 * move src/Server.zig to std.zig.Server so that the default test runner
   can use it.
 * the simpler test runner function which is used by work-in-progress
   backends now no longer prints to stderr, which is necessary in order
   for the build runner to not print the stderr as a warning message.
2023-03-15 10:48:14 -07:00
Andrew Kelley
ef5f8bd7c6 getExternalExecutor: fix aarch64 windows
std.zig.system.NativeTargetInfo.getExternalExecutor previously would
incorrectly communicate that wine could be used to run aarch64-windows
binaries on x86_64-linux, and x86_64-windows binaries on aarch64-linux.
Neither of these things are true.
2023-03-15 10:48:14 -07:00
Andrew Kelley
98299e7787 add std.process.cleanExit 2023-03-15 10:48:14 -07:00
Andrew Kelley
53fb59ea9b std.fifo: make toOwnedSlice support head != 0 2023-03-15 10:48:14 -07:00
Andrew Kelley
fbce6a749d disable failing aarch64 backend behavior tests 2023-03-15 10:48:14 -07:00
Andrew Kelley
1a3c1fe820 test-link: add names to headerpad test 2023-03-15 10:48:14 -07:00
Andrew Kelley
2956232b42 standalone tests: avoid running on strange target
Without this, aarch64-linux tried to compile this test for
aarch64-windows with the same CPU settings, which is not an intended
test combination.
2023-03-15 10:48:14 -07:00
Andrew Kelley
2c326c87b1 build.zig: install the langref to $prefix/doc/langref.html
and update the CI scripts to match.
2023-03-15 10:48:14 -07:00
Andrew Kelley
f4428e5804 fix wasm bootstrapping compilation errors 2023-03-15 10:48:14 -07:00
Andrew Kelley
ba77959137 Revert "build runner: print to stderr in dumb terminals"
This reverts commit e6f759e1c64668c50d3ff2d02c64a66c871da0ac.

I changed my mind. I don't like the output because it makes it harder to
find the actual errors in CI logs.
2023-03-15 10:48:14 -07:00
Andrew Kelley
20b35332fe build.zig: bump maxrss upper bound for std lib tests 2023-03-15 10:48:14 -07:00
Andrew Kelley
7d5bce56e1 build runner: print to stderr in dumb terminals
Terminal progress is suppressed and instead there is an explicit
handling of printing to stderr, one line per step make() function call.
The output looks very similar to Ninja.

A future commit should add a -q to quiet the output.
2023-03-15 10:48:14 -07:00
Andrew Kelley
097bcca069 build.zig: fix how test-cases marked is_test=1 are handled 2023-03-15 10:48:14 -07:00
Andrew Kelley
bf73620cbd build runner: communicate TTY conf to child procs via env vars 2023-03-15 10:48:14 -07:00
Andrew Kelley
28bda2eab0 make -Dno-lib also skip docgen 2023-03-15 10:48:14 -07:00
Andrew Kelley
857296a9f4 build.zig: update docgen to modern build system API
it still writes the output to zig-cache/langref.html but now it does
that explicitly as a legacy step with the intention of having that
removed in the future. It also outputs the langref to the install
prefix.
2023-03-15 10:48:14 -07:00
Andrew Kelley
f829f848dd std.Build.InstallFileStep: add missing step dependencies
in the creation function, which had to change from init() to create().
2023-03-15 10:48:14 -07:00
Andrew Kelley
2c491d734e docgen: don't print progress in dumb terminals 2023-03-15 10:48:14 -07:00
Andrew Kelley
f31aeb0010 std.Build.WriteFileStep: add missing step dependencies 2023-03-15 10:48:14 -07:00
Andrew Kelley
a333bb91ff zig objcopy: support the compiler protocol
This commit extracts out server code into src/Server.zig and uses it
both in the main CLI as well as `zig objcopy`.

std.Build.ObjCopyStep now adds `--listen=-` to the CLI for `zig objcopy`
and observes the protocol for progress and other kinds of integrations.

This fixes the last two test failures of this branch when I run
`zig build test` locally.
2023-03-15 10:48:14 -07:00
Andrew Kelley
59f5df3af9 std.Build: use Cache hash helper for package prefix dirs
Previously this code used SipHash(1, 3) directly; now that we have the
cache system available in the build system, borrow the same
implementation as is being used everywhere else.
2023-03-15 10:48:14 -07:00
Andrew Kelley
29cfd47d65 re-enable test-cases and get them all passing
Instead of using `zig test` to build a special version of the compiler
that runs all the test-cases, the zig build system is now used as much
as possible - all with the basic steps found in the standard library.

For incremental compilation tests (the ones that look like foo.0.zig,
foo.1.zig, foo.2.zig, etc.), a special version of the compiler is
compiled into a utility executable called "check-case" which checks
exactly one sequence of incremental updates in an independent
subprocess. Previously, all incremental and non-incremental test cases
were done in the same test runner process.

The compile error checking code is now simpler, but also a bit
rudimentary, and so it additionally makes sure that the actual compile
errors do not include *extra* messages, and it makes sure that the
actual compile errors output in the same order as expected. It is also
based on the "ends-with" property of each line rather than the previous
logic, which frankly I didn't want to touch with a ten-meter pole. The
compile error test cases have been updated to pass in light of these
differences.

Previously, 'error' mode with 0 compile errors was used to shoehorn in a
different kind of test-case - one that only checks if a piece of code
compiles without errors. Now there is a 'compile' mode of test-cases,
and 'error' must be only used when there are greater than 0 errors.

link test cases are updated to omit the target object format argument
when calling checkObject since that is no longer needed.

The test/stage2 directory is removed; the 2 files within are moved to be
directly in the test/ directory.
2023-03-15 10:48:14 -07:00
Andrew Kelley
7cc4a6965c build runner enhancements in preparation for test-cases
* std.zig.ErrorBundle: support rendering options for whether to include
   the reference trace, whether to include the source line, and TTY
   configuration.

 * build runner: don't print progress in dumb terminals

 * std.Build.CompileStep:
   - add a way to expect compilation errors via the new `expect_errors`
     field. This is an advanced setting that can change the intent of
     the CompileStep. If this slice has nonzero length, it means that
     the CompileStep exists to check for compile errors and return
     *success* if they match, and failure otherwise.
   - remove the object format parameter from `checkObject`. The object
     format is known based on the CompileStep's target.
   - Avoid passing -L and -I flags for nonexistent directories within
     search_prefixes. This prevents a warning, that should probably be
     upgraded to an error in Zig's CLI parsing code, when the linker
     sees an -L directory that does not exist.

 * std.Build.Step:
   - When spawning the zig compiler process, takes advantage of the new
     `std.Progress.Node.setName` API to avoid ticking up a meaningless
     number at every progress update.
2023-03-15 10:48:14 -07:00
Andrew Kelley
3186658e60 std.Build.CheckFileStep: add a way to expect exact
This is done in a bit of a haphazard way. Eventually the API needs to
break in favor of a "checks" system similar to how RunStep works.
2023-03-15 10:48:14 -07:00
Andrew Kelley
3b00e341fd AstGen: skip walking the AST when there are parse errors
The AST -> ZIR lowering process assumes an AST that does not have any
parse errors.
2023-03-15 10:48:14 -07:00
Andrew Kelley
25c3878c00 std.fs.File.readvAll: fix behavior for 0-length vectors
The OS layer expects pointer addresses to be inside the application's
address space even if the length is zero. Meanwhile, in Zig, slices may
have undefined pointer addresses when the length is zero. So this
function now modifies the iov_base fields when the length is zero.
2023-03-15 10:48:14 -07:00
Andrew Kelley
7db74009db std.Progress.Node: add a setName method
This can be used to update an existing node's label rather than indicate
that more things have been accomplished.
2023-03-15 10:48:14 -07:00
Andrew Kelley
7106a91b09 CLI: fix ast-check printing ZIR errors twice 2023-03-15 10:48:14 -07:00
Andrew Kelley
23295f64ca fix ZIR decoding of error notes 2023-03-15 10:48:14 -07:00
Andrew Kelley
974a6fe757 std.Build.RunStep: support -fqemu solving bad dynamic linker 2023-03-15 10:48:14 -07:00
Andrew Kelley
8d4067e7a3 CI: take advantage of zig build concurrency
I ain't afraid of no ghost.

This reverts commit 14a176b9b16e07a66a2f9cd485aaf80fed0f5a12.
2023-03-15 10:48:14 -07:00
Andrew Kelley
030742f1f7 re-enable standalone tests based on build.zig 2023-03-15 10:48:14 -07:00