aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-03-16LICENSE: Put test data in public domainMichael Forney
2022-03-16LICENSE: Update copyright yearMichael Forney
2022-03-10qbe: Only return 0 from main if it has type intMichael 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-10Add -Wno-maybe-uninitialized to prevent false-positive warningsMichael Forney
2022-02-10Update qbe submoduleMichael Forney
2022-02-10Remove one last use of _NoreturnMichael Forney
2022-02-10qbe: Switch to new unsigned-float conversion operatorsMichael Forney
2022-02-10qbe: Use new unary negation operatorMichael Forney
2022-02-10qbe: Switch to unary negationMichael Forney
This fixes bugs involving floating point negative zero.
2022-02-10README: Remove recommendation of qbe branchMichael Forney
2022-02-10Update qbe submoduleMichael Forney
2022-01-22Handle unary minus specially instead of 0 - xMichael Forney
This is necessary to fix unary negation of floating-point 0 (also depends on a pending qbe patch).
2022-01-22Remove most usage of fixed-width integer typesMichael 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-22eval: Simplify sign/zero extensionMichael Forney
2022-01-22Remove unused type propertiesMichael Forney
2022-01-22Port to C99Michael Forney
2022-01-01Remove dependency on signed integer representationMichael Forney
2021-12-06decl: Fix typedefs with type qualifiersMichael Forney
Previously, the qualifiers were saved, but accidentally ignored when the typedef was referenced.
2021-12-06decl: Simplify struct size calculationMichael Forney
2021-12-06decl: Remove struct member name from error messagesMichael Forney
It could be NULL in some cases.
2021-12-06decl: Use strictest alignment when multiple specifiers are presentMichael Forney
This is specified by the last sentence in C11 6.7.5p6.
2021-12-06decl: Enforce that _Alignas is at least as strict as required by typeMichael Forney
2021-11-25Add __builtin_unreachable stubMichael Forney
2021-10-25decl: Allow alignment > 16 of localsMichael 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-25decl: Allow alignment > 16 of globals and struct membersMichael Forney
2021-10-25qbe: Add helper function for mkinstMichael Forney
This simplifies the creation of allocation instructions in the start block.
2021-10-25eval: Fix int-to-float conversionsMichael 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-25qbe: Use ... to separate named and variadic argumentsMichael 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-25Update qbe submoduleMichael Forney
2021-10-21Document the C23 features we implementMichael Forney
2021-10-21expr: Add support for UTF-8 character constantsMichael Forney
2021-10-21stmt: Allow labels intermixed with declarations in compound statementsMichael 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-21Rename variableMichael Forney
We will use the name 'label' for a function.
2021-10-21Remove obsolete commentMichael Forney
2021-10-21expr: Implement binary integer constantsMichael Forney
These are in the latest C23 draft.
2021-10-21pp: Separate function-like macro expansion to its own functionMichael Forney
2021-10-20expr: Fix octal escapes followed by octal digitsMichael Forney
2021-10-20expr: Add support for wide string literalsMichael Forney
Thanks to Nihal Jere for his initial patches implementing this feature. Fixes #35.
2021-10-20utf: Detect invalid codepointsMichael 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-20utf: Change argument orderMichael Forney
Also, make utf8dec take unsigned char * to avoid overflow when converting to signed char.
2021-10-18expr: Make sure __builtin_va_end argument is evaluated for side-effectsMichael Forney
2021-10-18qbe: Fix jnz controlled by short/char typeMichael Forney
Although we don't need the cnew in this case, we still need to do the appropriate extension to 32-bit.
2021-10-03expr: Use end pointer to detect string-to-number conversion failuresMichael 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-03util: Don't error on NULL from malloc if requested size was 0Michael 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-03qbe: Remove some unused includesMichael 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-02qbe: Re-add conversion to bool RHS of logical and/orMichael 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-29eval: Allow subtraction in address constantsMichael Forney
2021-09-29qbe: Add missing check that binary operator is + for address constantMichael Forney
2021-09-29eval: Avoid implementation-defined unsigned to signed conversionsMichael 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-29Rename uint64_t field of constant union to uMichael Forney
This will prepare us for adding a signed int64_t field called i.