Commit Graph

15871 Commits

Author SHA1 Message Date
mlugg
3aab81b0ab Builtin: clean up formatting of generated code
This commit simply tweaks the generated `builtin.zig` source code to be
more consistent and in line with current conventions.
2024-12-09 17:35:10 -05:00
Alex Rønne Petersen
7cd2c1ce87 Merge pull request #22191 from alexrp/wasi-libc-names
`std.zig.target`: Teach `isLibCLibName()` about emulated wasi-libc libraries
2024-12-09 10:46:56 +01:00
Alex Rønne Petersen
589f4e9170 Merge pull request #22190 from alexrp/cc-args
`Compilation`: Don't rely on Clang defaults for options that are user-facing.
2024-12-09 10:46:31 +01:00
Alex Rønne Petersen
f283791a5e compiler: Link libc when we're asked to link to an emulated wasi-libc library. 2024-12-08 20:22:13 +01:00
Alex Rønne Petersen
1e095024a7 compiler: Check for wasi-libc emulated libraries before libc libraries.
This will become useful when we update wasi-libc and get the emulated libdl.
2024-12-08 20:20:54 +01:00
wooster0
a221b2fbf2 Sema: fix use of Zcu.LazySrcLoc in error message
It currently prints as:

:3:18: error: untagged union 'Zcu.LazySrcLoc{ .base_node_inst = InternPool.TrackedInst.Index(104), .offset = Zcu.LazySrcLoc.Offset{ .node_offset = Zcu.LazySrcLoc.Offset.TracedOffset{ .x = -2, .trace = (value tracing disabled) } } }' cannot be converted to integer
2024-12-08 17:23:57 +00:00
Alex Rønne Petersen
6951ee43bf Compilation: Don't rely on Clang defaults for options that are user-facing. 2024-12-08 16:53:55 +01:00
Alex Rønne Petersen
8d9ff8353d compiler: Update the list of targets that have a red zone. 2024-12-08 16:52:44 +01:00
Alex Rønne Petersen
e62aac3ec4 compiler: Only omit frame pointers by default for ReleaseSmall.
Frame pointers make both debugging and profiling work better, and the overhead
is reportedly 1% or less for typical programs [0]. I think the pros outweigh the
cons here. People who *really* care about that 1% can simply use the
-fomit-frame-pointer option to reclaim it. For ReleaseSmall, though, it makes
sense to omit frame pointers by default for the sake of code size, as we already
strip the binary in this case anyway.

Closes #22161.

[0] https://www.brendangregg.com/blog/2024-03-17/the-return-of-the-frame-pointers.html
2024-12-08 04:18:12 -05:00
Andrew Kelley
eb9c9a38f2 Merge pull request #22167 from alexrp/compiler-rt-names
compiler: Classify various compiler-rt and libunwind names accurately and satisfy them
2024-12-06 19:04:39 -05:00
Alex Rønne Petersen
8f27fc6c07 compiler: Classify libssp as an alias for compiler-rt.
This is a GCC library providing symbols with stack smashing protection. We
provide (most of) these symbols in our compiler-rt.
2024-12-06 15:10:37 +01:00
Alex Rønne Petersen
da794ec7a3 compiler: Remove warning about superfluous compiler-rt libraries.
* This warning's wording is actually inaccurate when using the -fno-compiler-rt
  or -rtlib=none options.
* It's not all that helpful; it's already understood that these libraries are
  part of the compiler, so printing a warning is just noise. In practice, this
  warning would always happen when building upstream musl, for example.
* We don't warn when we satisfy -lunwind using our bundled libunwind either, or
  various libc libraries using our bundled libc, or when providing libc++, etc.
  So I really don't think we should be warning here either.
2024-12-06 14:57:22 +01:00
Alex Rønne Petersen
a879c3ea0b compiler: Classify libgcc as an alias for compiler-rt.
This is GCC's equivalent to compiler-rt. The two libraries have a huge overlap
in exported symbols, so we may as well satisfy it this way to increase
compatibility with build systems in the wild.
2024-12-06 14:57:22 +01:00
Alex Rønne Petersen
e7169e9d4d compiler: Classify libgcc_eh as an alias for libunwind.
This is GCC's take on libunwind. We can satisfy it by way of our bundled LLVM
libunwind implementation.

Closes #17268.
2024-12-06 14:57:22 +01:00
Alex Rønne Petersen
37a34b54af compiler: Recognize libgcc_s regardless of target ABI.
The real libgcc_s is a compiler-provided library; it works just fine with both
glibc and musl. There's no reason that I can see for this check to be limited to
glibc-based targets.
2024-12-06 14:57:19 +01:00
Alex Rønne Petersen
f8372d030e compiler: Classify libatomic as an alias for compiler-rt.
This is a library that ships with GCC and provides fallback implementations of
atomic intrinsics where necessary. Since we do the same in our compiler-rt
implementation, and since some build systems insist on passing -latomic even
for Clang (which zig cc masquerades as), just satisfy this dependency by way of
compiler-rt.

Closes #22165.
2024-12-06 14:51:22 +01:00
Alex Rønne Petersen
cbc05e0b1d Compilation: Consider *.rlib files to be static libraries.
These are produced by rustc: https://rustc-dev-guide.rust-lang.org/backend/libs-and-metadata.html#rlib
2024-12-05 15:05:55 +01:00
Alex Rønne Petersen
d70be200d8 Merge pull request #22141 from alexrp/target-remove-bridgeos
`std.Target`: Remove `Os.Tag.bridgeos`
2024-12-05 15:05:25 +01:00
Alex Rønne Petersen
4e29c67eed llvm: Remove dead targetArch() and targetOs() functions.
These were leftovers from when we used the LLVM API to create modules.
2024-12-03 20:43:20 +01:00
Alex Rønne Petersen
09b39f77b7 std.Target: Remove Os.Tag.bridgeos.
It doesn't appear that targeting bridgeOS is meaningfully supported by Apple.
Even LLVM/Clang appear to have incomplete support for it, suggesting that Apple
never bothered to upstream that support. So there's really no sense in us
pretending to support this.
2024-12-03 20:43:15 +01:00
Alex Kladov
6188cb8e50 sema: add a missing errdefer
This fix doesn't matter at all in the grand scheme of things, but I
think the story behind it is perhaps curious, as it might point at a
design flaw in the Sema's error reporting API. So, a story:

On lobsters, there's a rather heated discussion on the merits on RAII vs
defer. I don't really like participating in heating discussions, but
also sort of can't stop thinking about this.

My own personal experience with Zig's defer and errdefer is that they
are fiddly to get right consistency --- if a program has a lot of
resource management to do, I _always_ mess up at least one
defer/errdefer. I've found my internal peace by just avoiding
spread-out, "pox" resource management, and instead centralizing resource
ownership under one of the following patterns:

* Either the thing is acquired and released in main
* Or main allocates N instances of thing, and then the rest of the code
  explicitly juggles this finite pool of N. Notably, this juggling
  typically doesn't involve defer/errdefer at all, as, at this level of
  precision, there are no `try`s left, so you only code the happy path
* Or there's some sort of arena thing, where a bunch of resources have a
  single owner, the user's don' bother cleaning up their resources, and
  instead the owner does it once at the end.

So I wanted to make a lobster.rs comment in the vein of "yeah, if your
program is mostly about resource management, then Zig could be kinda a
pain, but that's friction tells you something: perhaps your program
shouldn't be about resource management, and instead it should be doing
what it is supposed to do?". And, as an evidence for my claim, I wanted
to point out some large body of Zig code which doesn't have a lot of
errdefers.

So, I cracked opened Sema.zig, `ctrl+f` for `defer`, saw whopping 400
something occupancies, and my heart skipped a bit. Looking at the
occurrences, _some_ of them were non-resource-related usages of defer.
But a lot of them were the following pattern:

```zig
const msg = try sema.errMsg(src, "comptime control flow inside runtime block", .{});
errdefer msg.destroy(sema.gpa);
```

This is exactly the thing that I know _I_ can't get right consistently!
So, at this point, I made a prediction that at least one of `errdefer`s
is missing. So, I looked at the first few `const msg = try` and of
course found one without `errdefer`.

I am at 0.8 that, even with this PR applied, the claim will still stand
--- there will be `errdefer` missing. So it feels like some API
re-design is in order, to make sure individual error messages are not
resources.

Could Sema just own all partially-constructed error messages, and, at a
few known safe-points:

* if the control flow is normal, assert that there are no in-progress
  error messages
* if we are throwing an error, go and release messages immediately?

I am unlikely to do the actual refactor here, but I think it's worth
highlighting the overall pattern here.

PS: I am only 0.9 sure that what I've found is indeed a bug! I don't
understand the code, I did a dumb text search, so I _could_ have made a
fool of myself here :P
2024-12-03 14:18:26 -05:00
Jakub Konka
29c7f6810f macho: fix 32bit builds 2024-12-02 22:05:21 -05:00
Jakub Konka
0769afbb0f macho: refactors errors from parsing DWARF
Currently we don't report any errors to the user due to a bug in
self-hosted x86_64-macos backend.
2024-12-02 22:05:21 -05:00
Jakub Konka
c824b35051 macho: move things around in MachO/Object.zig and refactor 2024-12-02 22:05:21 -05:00
Jakub Konka
8e81500051 macho: handle DWARFv5 when parsing debug info in objects 2024-12-02 22:05:21 -05:00
Jakub Konka
808306f49a macho: rename dwarf.zig to Dwarf.zig
Separate commit since macOS is case-insensitive by default and so
I had to do it from Linux.
2024-12-02 22:05:21 -05:00
Jacob Young
c013f45ad0 coff: fix memory leak 2024-12-02 16:01:58 -05:00
Tw
aa7d138462 zig fetch: add missing path separator in error message
Signed-off-by: Tw <tw19881113@gmail.com>
2024-11-29 18:50:21 -05:00
Andrew Kelley
a47aa9dd9d Merge pull request #22095 from alexrp/test-llvm-emit
Change `llvm_targets` tests to actually emit objects, and fix bugs found as a result
2024-11-29 15:28:54 -05:00
mlugg
c3821fe4ca compiler: use @Type instead of @TypeOf to print enum literal type 2024-11-29 15:26:58 -05:00
Justin Braben
07cd488d42 Add build option to set tracy-callstack-depth in build.zig (#21990) 2024-11-29 12:13:06 -08:00
Andrew Kelley
cfdb001a8f Merge pull request #22099 from Rexicon226/fix-cat-mul
change `++` and `**` to not return mutable pointers
2024-11-29 15:05:49 -05:00
David Rubin
1d78d4f8c1 sema: hotpath ++ and ** for array-pointers 2024-11-28 18:05:36 -08:00
Alex Rønne Petersen
7361f0bafa link.MachO: Don't try to get a semver value for bridgeos. 2024-11-28 22:04:00 +01:00
Alex Rønne Petersen
f0f2dc52cc llvm: Lower ohoseabi to ohos instead of verbatim.
LLVM doesn't recognize ohoseabi.
2024-11-28 22:04:00 +01:00
Alex Rønne Petersen
8594f179f9 Merge pull request #22067 from alexrp/pie-tests
Add PIC/PIE tests and fix some bugs + some improvements to the test harness
2024-11-28 14:07:28 +01:00
David Rubin
bc3094b278 sema: make ++ and ** return immutable pointers 2024-11-27 20:39:23 -08:00
Justin Braben
d16a9b0acb std.os.windows: Map PIPE_NOT_AVAILABLE from OpenFile() to error.NoDevice (#21938) 2024-11-27 22:33:29 +01:00
Andrew Kelley
11bf2d92de diversify "unable to spawn" failure messages
to help understand where a spurious failure is occurring
2024-11-26 13:56:40 -08:00
David Rubin
a6af55cc6e ip: cleanup @constCast usages 2024-11-25 18:41:36 -05:00
Jacob Young
c894ac09a3 dwarf: fix stepping through an inline loop containing one statement
Previously, stepping from the single statement within the loop would
always exit the loop because all of the code unrolled from the loop is
associated with the same line and treated by the debugger as one line.
2024-11-24 17:28:12 -05:00
Alex Rønne Petersen
24ecf45569 std.Target: Add Os.HurdVersionRange for Os.Tag.hurd.
This is necessary since isGnuLibC() is true for hurd, so we need to be able to
represent a glibc version for it.

Also add an Os.TaggedVersionRange.gnuLibCVersion() convenience function.
2024-11-24 22:11:16 +01:00
Andrew Kelley
ed8955cea6 Merge pull request #22049 from alexrp/musl-gen-stubs
`gen_stubs`: No compiler-rt hacks, more compact output, and more arch support
2024-11-23 23:50:36 -05:00
Alex Rønne Petersen
aef5c75602 compiler: Disallow align(0) everywhere in the language.
Thus leaving the design space for this alignment value open, e.g. for packing.
2024-11-23 18:44:07 -05:00
Alex Rønne Petersen
57e4fa14bb musl: Define TIME32 and FAMILY_* macros for libc.S as appropriate.
Also adjust ARCH_* logic for the updated gen_stubs.zig tool.
2024-11-23 03:10:58 +01:00
David Rubin
66a7c09def link: use target to determine risc-v eflag validity 2024-11-22 19:34:47 -05:00
Alex Rønne Petersen
8b2b9aa019 Compilation: Consider *.lo files to be object files.
Fixes musl libc.so compilation with zig cc.
2024-11-23 01:22:20 +01:00
Shawn Gao
dafe1a910d Append disabled LLVM CPU features after enabled ones 2024-11-20 10:09:03 +01:00
xdBronch
5f3a70ed5f Fix peer type resolution with allowzero pointers 2024-11-20 02:09:50 +02:00
Alex Rønne Petersen
94be75a94f Compilation: Re-enable LTO for RISC-V. 2024-11-19 12:04:42 +01:00