Age | Commit message (Collapse) | Author | |
---|---|---|---|
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. | |||
2021-09-29 | eval: Remove now unneeded handling of EXPRCOND | Michael Forney | |
We now do this evaluation during parsing. | |||
2021-09-29 | Use unsigned long long for sizes and offsets | Michael Forney | |
We don't need exact-width integer types here. | |||
2021-09-28 | expr: Skip codegen for unused expression in conditional with constant expression | Michael Forney | |
This compiles `0 ? e1 : e2` as `e2`, and `1 ? e1 : e2` as `e1` (while still adjusting the type as necessary). | |||
2021-09-28 | mkexpr: Add a base parameter to mkexpr | Michael Forney | |
2021-09-28 | runtests: Print better result summary | Michael Forney | |
2021-09-28 | Skip unnecessary conversion to bool for logical and conditional expressions | Michael Forney | |
As in ede6a5c9, if an expression is used only to control a jnz, we don't need to convert it to a 0 or 1 value. QBE ignores the upper 32-bits of the argument to jnz, so the conversion is still needed for pointer, long, and floating point types (including float since -0 has non-zero bit representation). | |||
2021-09-14 | configure: Undefine __PIC__ | Michael Forney | |
QBE doesn't emit position-independent code, so we don't want __PIC__ defined if the preprocessor does by default. | |||
2021-09-14 | driver: Pass -nostdinc on to preprocessor | Michael Forney | |
2021-09-14 | qbe: Support more aligned types in funccopy | Michael Forney | |
We don't have any of these currently, but it's easier to support than to error out. | |||
2021-09-14 | qbe: Fix temporary type for < 8 byte aligned struct copies | Michael Forney | |
2021-09-13 | Add test for string concatenation corner case | Michael Forney | |
2021-09-13 | Revert "Add stringconcat function to concatenate adjacent string literals" | Michael Forney | |
This reverts commit c16f07acf655b9f4fb006d8256b4027fb5a13aa8. This incorrectly allows octal escapes to span between adjacent string literals (e.g. "\0" "1" is not the same as "\01"). | |||
2021-09-13 | qbe, init: Handle prefixed string literals | Nihal Jere | |
2021-09-13 | Make string literal data unsigned char | Michael Forney | |
2021-09-09 | CI: Switch to debian/stable | Michael Forney | |
2021-09-07 | decl: Include location for _Complex/_Atomic error messages | Michael Forney | |
2021-09-07 | expr: Fix varargs again and add more tests | Michael Forney | |
2021-09-07 | qbe: Add default cases to avoid uninitialized warning | Michael Forney | |
2021-09-06 | Add config.mk to .gitignore | Michael Forney | |