Age | Commit message (Collapse) | Author | |
---|---|---|---|
2022-03-16 | LICENSE: Put test data in public domain | Michael Forney | |
2022-03-16 | LICENSE: Update copyright year | Michael Forney | |
2022-03-10 | qbe: Only return 0 from main if it has type int | Michael Forney | |
Though C11 5.1.2.2.1 says that main must have a return type of int, we could still encounter a program which declares it as something else. This is undefined behavior, but we should not produce invalid QBE IL in this case. Also, 5.1.2.2.3 specifies that the implicit return 0 should only apply when main's return type is compatible with int. | |||
2022-02-10 | Add -Wno-maybe-uninitialized to prevent false-positive warnings | Michael Forney | |
2022-02-10 | Update qbe submodule | Michael Forney | |
2022-02-10 | Remove one last use of _Noreturn | Michael Forney | |
2022-02-10 | qbe: Switch to new unsigned-float conversion operators | Michael Forney | |
2022-02-10 | qbe: Use new unary negation operator | Michael Forney | |
2022-02-10 | qbe: Switch to unary negation | Michael Forney | |
This fixes bugs involving floating point negative zero. | |||
2022-02-10 | README: Remove recommendation of qbe branch | Michael Forney | |
2022-02-10 | Update qbe submodule | Michael Forney | |
2022-01-22 | Handle unary minus specially instead of 0 - x | Michael Forney | |
This is necessary to fix unary negation of floating-point 0 (also depends on a pending qbe patch). | |||
2022-01-22 | Remove most usage of fixed-width integer types | Michael Forney | |
We only require a type of at least 64 bits, so just use unsigned long long. Only siphash remains as the last user of uint64_t. | |||
2022-01-22 | eval: Simplify sign/zero extension | Michael Forney | |
2022-01-22 | Remove unused type properties | Michael Forney | |
2022-01-22 | Port to C99 | Michael Forney | |
2022-01-01 | Remove dependency on signed integer representation | Michael Forney | |
2021-12-06 | decl: Fix typedefs with type qualifiers | Michael Forney | |
Previously, the qualifiers were saved, but accidentally ignored when the typedef was referenced. | |||
2021-12-06 | decl: Simplify struct size calculation | Michael Forney | |
2021-12-06 | decl: Remove struct member name from error messages | Michael Forney | |
It could be NULL in some cases. | |||
2021-12-06 | decl: Use strictest alignment when multiple specifiers are present | Michael Forney | |
This is specified by the last sentence in C11 6.7.5p6. | |||
2021-12-06 | decl: Enforce that _Alignas is at least as strict as required by type | Michael Forney | |
2021-11-25 | Add __builtin_unreachable stub | Michael Forney | |
2021-10-25 | decl: Allow alignment > 16 of locals | Michael Forney | |
This is not yet supported by QBE, so for now we allocate a bit extra and choose the address in the allocated region with an aligned address. | |||
2021-10-25 | decl: Allow alignment > 16 of globals and struct members | Michael Forney | |
2021-10-25 | qbe: Add helper function for mkinst | Michael Forney | |
This simplifies the creation of allocation instructions in the start block. | |||
2021-10-25 | eval: Fix int-to-float conversions | Michael Forney | |
Also, add bounds checks for float-to-int conversions. If the integer part can't be represented in the result type, C behavior is undefined. Although this means the result is arbitrary, we need to avoid undefined behavior in cproc itself when given such a program as input. | |||
2021-10-25 | qbe: Use ... to separate named and variadic arguments | Michael Forney | |
This requires a not-yet-upstream QBE patch, and is needed for riscv64 support, since the calling convention may be different depending on whether the argument is named or variadic. | |||
2021-10-25 | Update qbe submodule | Michael Forney | |
2021-10-21 | Document the C23 features we implement | Michael Forney | |
2021-10-21 | expr: Add support for UTF-8 character constants | Michael Forney | |
2021-10-21 | stmt: Allow labels intermixed with declarations in compound statements | Michael Forney | |
C23 relaxes the restriction that labels must always be followed by statements in N2508[0]. [0] http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2508.pdf | |||
2021-10-21 | Rename variable | Michael Forney | |
We will use the name 'label' for a function. | |||
2021-10-21 | Remove obsolete comment | Michael Forney | |
2021-10-21 | expr: Implement binary integer constants | Michael Forney | |
These are in the latest C23 draft. | |||
2021-10-21 | pp: Separate function-like macro expansion to its own function | Michael Forney | |
2021-10-20 | expr: Fix octal escapes followed by octal digits | Michael Forney | |
2021-10-20 | expr: Add support for wide string literals | Michael Forney | |
Thanks to Nihal Jere for his initial patches implementing this feature. Fixes #35. | |||
2021-10-20 | utf: Detect invalid codepoints | Michael Forney | |
Also, make utf*enc assert that the codepoint is valid and return 0 for an invalid codepoint. This makes it possible to use safely without error checking. We intend that these functions will only be called with valid codepoints. | |||
2021-10-20 | utf: Change argument order | Michael Forney | |
Also, make utf8dec take unsigned char * to avoid overflow when converting to signed char. | |||
2021-10-18 | expr: Make sure __builtin_va_end argument is evaluated for side-effects | Michael Forney | |
2021-10-18 | qbe: Fix jnz controlled by short/char type | Michael Forney | |
Although we don't need the cnew in this case, we still need to do the appropriate extension to 32-bit. | |||
2021-10-03 | expr: Use end pointer to detect string-to-number conversion failures | Michael Forney | |
We explicitly ignore ERANGE for strtod, and in any other error case, the end pointer is set to the beginning of the string. | |||
2021-10-03 | util: Don't error on NULL from malloc if requested size was 0 | Michael Forney | |
It is implementation-defined whether malloc returns NULL or some pointer when the size is 0, so we don't want to error out if the implementation chose NULL. | |||
2021-10-03 | qbe: Remove some unused includes | Michael Forney | |
We now hard-code the float precision in the format string instead of using the float.h macros. The other headers were never used (except maybe prior to the first commit). | |||
2021-10-02 | qbe: Re-add conversion to bool RHS of logical and/or | Michael Forney | |
7e838669 removed conversion to bool for int expressions used only to control jnz, but incorrectly dropped the conversion for the right-hand-side of logical and/or as well. We need the result of the expression to be 0 or 1, so we still need that conversion. | |||
2021-09-29 | eval: Allow subtraction in address constants | Michael Forney | |
2021-09-29 | qbe: Add missing check that binary operator is + for address constant | Michael Forney | |
2021-09-29 | eval: Avoid implementation-defined unsigned to signed conversions | Michael Forney | |
Instead, use an additional int64_t member in the union. Since exact-width integer types have no padding bits or trap representations, and use two's-complement representation, we can portably access an int64_t union member stored as uint64_t and vice-versa. This allows us to reinterpret the value without invoking potentially implementation-defined behavior of casting an unsigned integer to a signed integer type which may not be able to represent its value. | |||
2021-09-29 | Rename uint64_t field of constant union to u | Michael Forney | |
This will prepare us for adding a signed int64_t field called i. |