aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-06-13Fix tests for x86_64 -> x86_64-sysv target renameMichael Forney
2022-06-06Rename x86_64 target to include ABIMichael Forney
2022-05-19Add unreachable returns to silence compiler warningsMichael Forney
2022-05-19eval: Fix range check of double during conversion to intMichael Forney
2⁶⁴-1 and 2⁶³-1 are not representable as double and get rounded to 2⁶⁴ and 2⁶³ respectively, which are outside the range of 64-bit [u]int. This causes undefined behavior when a constant expression is evaluated that involves a conversion of a very large or small value to an integer type. To fix this, change the > to >= and use constants representable as double.
2022-05-13expr: Fix qualifiers of base type during implicit array conversionMichael Forney
2022-05-11expr: Implement type-checking for casts and assignmentsMichael Forney
2022-05-11expr: fix erroneous comparisonNRK
as long as `size_t`'s conversion rank is >= `int` this check would work out fine. but in case size_t happens to be less than int (which I believe is valid under the C standard) then comparison will take place in `signed int` and the operand `-1` will not get implicitly converted to SIZE_MAX. explicitly cast it to size_t to avoid such issues.
2022-05-09expr: Use integer type for member access intermediate address calculationMichael Forney
2022-04-23Remove use of C11 noreturnMichael Forney
2022-03-22Update qbe submoduleMichael Forney
2022-03-22init: Allow empty initializersMichael Forney
2022-03-22pp: Ignore pragmasMichael Forney
The standard says we should ignore any pragmas that we don't recognize.
2022-03-22Add test for typeof on expression with array typeMichael Forney
2022-03-22decl: StyleMichael Forney
2022-03-22Allow unnamed parameters in function definitionsMichael Forney
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.