Age | Commit message (Collapse) | Author | |
---|---|---|---|
2021-07-05 | qbe: Fix bitfield sign extension with types shorter than int | Michael Forney | |
2021-07-02 | qbe: Remove more unnecessary copy instructions | Michael Forney | |
Now that we don't track QBE types within values, we don't have to worry about generating incorrect SSA when passing an 'l' value to a function taking a 'w'. So we can just return the source value instead of emitting a dummy copy instruction. | |||
2021-07-01 | qbe: Remove unnecessary distinction between loaduw and loadsw | Michael Forney | |
We always store the result to a w temporary, so there is no difference. In fact, QBE provides loadw as an alias for loadsw precisely for this reason. | |||
2021-07-01 | decl: Disallow members with incomplete types | Michael Forney | |
Make an exception for flexible array members, though we should also check that the flexible array member, if any, is last. | |||
2021-06-30 | stmt: Check that controlling expression is a scalar, and drop unneeded ↵ | Michael Forney | |
conversion The conversion is only needed for floating types. QBE isn't able to optimize it away for integer types yet, so removing this unnecessary conversion has a substantial performance benefit. | |||
2021-06-30 | qbe: Remove before unnecessary adds during copy | Michael Forney | |
2021-05-02 | expr: Include NUL-terminator in string expression data | Michael Forney | |
This will facilitate the support of wide-string literals. Based on patch from Nihal Jere. | |||
2021-04-22 | Update test for DBL_DECIMAL_DIG | Michael Forney | |
2021-04-11 | Check in static-assert-struct test expected output | Michael Forney | |
2021-04-11 | decl: Allow _Static_assert in struct declaration | Michael Forney | |
2021-04-11 | decl: Allow _Alignas(0) | Michael Forney | |
C11 6.7.5p6 says "An alignment specification of zero has no effect". | |||
2021-04-08 | qbe: Remove unnecessary value copy for struct/union types | Michael Forney | |
Previously, this was needed so that an aggregate type value was updated to be an 'l' type value. However, since 5ff1d2fa the aggregate type name is stored in a separate parameter in IARG/ICALL instructions, so we can just re-use the same pointer value. | |||
2021-03-31 | qbe: Switch to fixed-size instruction struct | Michael Forney | |
Move jump and phi instructions to struct block, and function arguments to their own instruction. This will facilitate allocating instructions as an array. | |||
2021-03-30 | Add struct passing call test | Michael Forney | |
The struct-passing test checks for function definitions with struct arguments, but we were missing a test for function calls with struct arguments. | |||
2020-05-24 | qbe: Omit unnecessary add to help QBE's memopt pass | Michael Forney | |
2020-04-04 | expr: Fix type of '&' operator applied to array | Michael Forney | |
It should be a pointer to the array, not to the first element (as it would after implicit conversion without the '&' operator). | |||
2020-03-22 | pp: Don't add leading space for first stringized token | Michael Forney | |
2020-03-22 | pp: Implement variadic macros | Michael Forney | |
2020-03-18 | pp: Add test for function-like macro with no argument tokens | Michael Forney | |
2020-03-18 | pp: Finish '#' operator | Michael Forney | |
2020-03-17 | pp: Fix some whitespace after preprocessing | Michael Forney | |
2020-03-17 | pp: Add support for macro definition and expansion | Michael Forney | |
The token pasting operator `##` still needs to be implemented. | |||
2020-01-31 | eval: Allow casting address constants to integer types in constant expressions | Michael Forney | |
2020-01-30 | Add test for sizeof string literal | Michael Forney | |
This was regressed in d889bc80be and fixed in 090e2932ce. | |||
2020-01-30 | decl: Better check for inline definitions | Michael Forney | |
2019-08-13 | Remove test corresponding to cast-same-type.qbe | Michael Forney | |
This should have been removed when "expr: Fix cast of same type" was reverted in 0d1969024c. | |||
2019-08-12 | Revert "expr: Fix cast of same type" | Michael Forney | |
This reverts commit 1a38a5fc4844a0de8729be694a62ba0afce3ff52. This breaks comparisons bitfields in some cases, for instance extern struct {unsigned x:31;} s; int main(void) { return (unsigned)s.x - 1 < 0; } If we discard the cast, then it is a signed comparison because of integer promotion for bit-fields, otherwise it is an unsigned comparison. Additionally, the test case this was meant to fix is not actually ISO C, since casts must be to scalar types or `void`. | |||
2019-08-11 | decl: Allow enumerator values up to UINT_MAX | Michael Forney | |
2019-07-11 | expr: Fix cast of same type | Michael Forney | |
2019-07-10 | decl: Display message when _Static_assert fails | Michael Forney | |
2019-07-07 | type: Ignore parameter qualifiers when determining type compatibility | Michael Forney | |
The end of C11 6.7.6.3p15 says that qualifiers should be ignored when checking compatibility of function types. | |||
2019-07-05 | qbe: Handle K&R function definition argument promotion | Michael Forney | |
Parameters for K&R function definitions that are affected by default argument promotion are passed as their promoted type, so need to be converted back before storing into memory allocated for the parameter. | |||
2019-07-05 | stmt: Fix conversion of controlling expression to bool | Michael Forney | |
In d875bf74, I accidentally converted the increment expression to bool rather than the controlling expression. Whoops, I should check the updated test case IL more carefully next time. | |||
2019-07-03 | Implement no-op __builtin_expect | Michael Forney | |
2019-07-03 | Convert controlling expression of loops to bool | Michael Forney | |
2019-06-27 | qbe: Fix switch statements with 64-bit controlling expression | Michael Forney | |
2019-06-04 | Fix non-adjacent bit-fields | Michael Forney | |
2019-05-29 | Temporarily avoid %a when printing floating constants | Michael Forney | |
This is C99, but is not supported by fscanf in OpenBSD, so floating constants can't be read back in by QBE. | |||
2019-05-16 | Fix test after amend to 52bf506 | Michael Forney | |
2019-05-16 | stmt: continue in do-loop should evaluate controlling expression | Michael Forney | |
2019-05-16 | decl: Qualifiers of array type are for element type | Michael Forney | |
2019-05-16 | decl: extern storage class with initializer is still a definition | Michael Forney | |
2019-05-16 | Remove incorrect type equality check in usual arithmetic conversions | Michael Forney | |
Integer types still undergo integer promotions even if they are the same type. | |||
2019-05-15 | Implement asm labels | Michael Forney | |
2019-05-12 | eval: Keep track of kind of constant expression we are evaluating | Michael Forney | |
When we are evaluating an arithmetic constant expression, we don't want to indroduce static data definitions for string or compound literals. Fixes #59. | |||
2019-05-10 | qbe: Fix QBE types for structs containing bit-fields | Michael Forney | |
2019-05-08 | Update expected test output for fe4297ba1d | Michael Forney | |
2019-04-27 | Unnamed bit-fields don't contribute to size or alignment of unions, or size ↵ | Michael Forney | |
of structs | |||
2019-04-27 | Sign-extend result of bit-field assignments | Michael Forney | |
Fixes #51. Thanks to Andrew Chambers for the bug report and test case. | |||
2019-04-27 | Fix some function declarator corner cases | Michael Forney | |