Go to file
Andrew Kelley 6f303c01f3 LLVM: add extra padding to structs and tuples sometimes
* Sema: resolve type fully when emitting an alloc AIR instruction to
   avoid tripping assertion for checking struct field alignment.
 * LLVM backend: keep a reference to the LLVM target data alive during
   lowering so that we can ask LLVM what it thinks the ABI alignment
   and size of LLVM types are. We need this in order to lower tuples and
   structs so that we can put in extra padding bytes when Zig disagrees
   with LLVM about the size or alignment of something.
 * LLVM backend: make the LLVM struct type packed that contains the most
   aligned union field and the padding. This prevents the struct from
   being too big according to LLVM. In the future, we may want to
   consider instead emitting unions in a "flat" manner; putting the tag,
   most aligned union field, and padding all in the same struct field
   space.
 * LLVM backend: make structs with 2 or fewer fields return isByRef=false.
   This results in more efficient codegen. This required lowering of
   bitcast to sometimes store the struct into an alloca, ptrcast, and
   then load because LLVM does not allow bitcasting structs.
 * enable more passing behavior tests.
2022-03-01 18:24:00 -07:00
.builds
.github
ci Use lowercase in shasum for windows builds 2022-02-21 00:40:46 -05:00
cmake ci: use zig-bootstrap for windows 2022-02-16 18:43:45 -07:00
deps stage1: fix softfloat not getting correct endianness 2022-02-12 11:18:23 +01:00
doc Add documentation for common mistakes in errdefer scoping 2022-02-23 14:33:51 +02:00
lib std.BufSet.clone: fix key ownership 2022-03-01 13:28:47 -05:00
src LLVM: add extra padding to structs and tuples sometimes 2022-03-01 18:24:00 -07:00
test LLVM: add extra padding to structs and tuples sometimes 2022-03-01 18:24:00 -07:00
tools spirv spec: do not align packed struct fields 2022-02-24 19:48:34 +02:00
.gitattributes
.gitignore
build.zig build.zig: restore the ability to bootstrap with zig0 via option 2022-02-17 23:49:13 -07:00
CMakeLists.txt ci: azure: split build-and-test step (#10853) 2022-02-16 22:33:08 -05:00
CODE_OF_CONDUCT.md
CONTRIBUTING.md
LICENSE
README.md

ZIG

A general-purpose programming language and toolchain for maintaining robust, optimal, and reusable software.

Resources

Installation

License

The ultimate goal of the Zig project is to serve users. As a first-order effect, this means users of the compiler, helping programmers to write better software. Even more important, however, are the end-users.

Zig is intended to be used to help end-users accomplish their goals. Zig should be used to empower end-users, never to exploit them financially, or to limit their freedom to interact with hardware or software in any way.

However, such problems are best solved with social norms, not with software licenses. Any attempt to complicate the software license of Zig would risk compromising the value Zig provides.

Therefore, Zig is available under the MIT (Expat) License, and comes with a humble request: use it to make software better serve the needs of end-users.

This project redistributes code from other projects, some of which have other licenses besides MIT. Such licenses are generally similar to the MIT license for practical purposes. See the subdirectories and files inside lib/ for more details.