aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2019-04-17Update READMEMichael Forney
2019-04-17Implement bit-field initializersMichael Forney
2019-04-16Error instead of segfault when working with `long double`Michael Forney
2019-04-16Add a few more alternate keywordsMichael Forney
2019-04-16Use undecayed type in __typeof__Michael Forney
2019-04-16Implement __builtin_types_compatible_pMichael Forney
This is used by util-linux.
2019-04-16Alpine's fortify-headers still needs __extension__Michael Forney
2019-04-16tests -> testMichael Forney
2019-04-16Fix offset of initializer following fixed-length stringMichael Forney
2019-04-16Define __inline alternate keywordMichael Forney
2019-04-16Use a single section for alternate keyword definesMichael Forney
https://gcc.gnu.org/onlinedocs/gcc/Alternate-Keywords.html
2019-04-16Set __GNUC__=1Michael Forney
Although we support some GNU extensions beyond this, anything larger will cause glibc headers to use inline assembly to alias functions. We currently work around this by defining __asm__ to nothing, but that doesn't seem like the right thing to do. This also causes glibc to define an __extension__ and __restrict itself.
2019-04-16Use upstream QBEMichael Forney
2019-04-15init: Remove some unused includesMichael Forney
2019-04-15Silence gcc warningMichael Forney
2019-04-15init: Improve parseinit performance for sequential initializersMichael Forney
Now, we only traverse the current initializer list to find the place to insert a designated initializer. Regular initializers always go after the previous one. Fixes #37.
2019-04-15expr: Handle compound assignment of bit-fieldsMichael Forney
2019-04-15expr: Simplify assignexpr slightlyMichael Forney
2019-04-15StyleMichael Forney
2019-04-15expr: Check operand to '&' operatorMichael Forney
2019-04-15decl: Fix uninitialized access with unnamed bit-fieldsMichael Forney
2019-04-15Handle static sub-initializersMichael Forney
2019-04-14init: Error on bit-field initializers for nowMichael Forney
2019-04-14Initial support for loading/storing bit-fieldsMichael Forney
2019-04-14Define macros indicating missing optional featuresMichael Forney
2019-04-14decl: Make signedness of enum types match gccMichael Forney
2019-04-13Revert "Fold constexpr function into intconstexpr"Michael Forney
This reverts commit a080e36dac54b82beef63580f36cb0da9ad31788.
2019-04-13decl: Allow `register` in old-style parameter declarationsMichael Forney
2019-04-10expr: Pointer arithmetic requires complete *object* typesMichael Forney
2019-04-10type: unions are object typesMichael Forney
2019-04-07deps.mk: Include $(objdir) in target nameMichael Forney
2019-04-07Add FreeBSD build manifestMichael Forney
2019-04-07config.def.h: Remove extra indentMichael Forney
2019-04-07Makefile: Don't use $< outside of inference rulesMichael Forney
In POSIX make, the meaning $< is unspecified outside of inference rules.
2019-04-07Change $(objdir) instead of $(srcdir) for stage2 and stage3 buildsMichael Forney
This is a bit simpler, and avoids issues with FreeBSD make when including deps.mk (since the source files listed there are not relative to $(srcdir)). To do this, we need to make use of make(1) pattern substitutions, which are not yet standard (though accepted for issue 8[0]). Also, since the path of the object files seems to end up the resulting executables, breaking byte-wise comparison, make sure to strip the resulting executables. [0] http://austingroupbugs.net/view.php?id=519
2019-04-07expr: Handle parenthesized paremeter name in __builtin_va_startMichael Forney
FreeBSD defines va_start(ap, last)=__builtin_va_start((ap), (last))
2019-04-07driver: Use argv[0] to determine cc-qbe path if /proc/self/exe is not availableMichael Forney
2019-04-07driver: Make sure we have room for the '\0' byteMichael Forney
2019-04-06driver: Include signal.h for kill(2)Michael Forney
2019-04-06Use common code for checking for compatibility of base type for derived typesMichael Forney
2019-04-06Simplify a couple loopsMichael Forney
2019-04-06arg: Use (void *)0 instead of NULL in error case of conditional expressionMichael Forney
Even though NULL is a null pointer constant, the comma expression with NULL at the end is not. So, we must ensure that either the type of the comma expression is `char *` or `void *`, and we don't know this for NULL.
2019-04-06expr: Just use `unsigned long long` when calculating integer constant typeMichael Forney
Ideally, we shouldn't use uint64_t at all since it is not guaranteed to exist, and this case is easy enough to fix.
2019-04-06Track type qualifiers separatelyMichael Forney
Using a special qualified type kind has a number of problems: - Important fields such as size, align, and incomplete may not be set, since the qualified type was created before a struct was completed. - When we don't care about type qualifiers (which is the usual case), we have to explicitly unqualify the type which is annoying and error-prone. Instead, in derived types, keep track of the qualifiers of the base type alongside the base type (similar to what is done for members, parameters, declarations, and expressions in the past few commits).
2019-04-06Separate unqualified type and qualifiers in struct declMichael Forney
2019-04-06Separate unqualified type and qualifiers in struct memberMichael Forney
2019-04-06Separate unqualified type and qualifiers in struct paramMichael Forney
2019-04-06Separate unqualified type and qualifiers in struct exprMichael Forney
2019-04-05expr: Make lvalue default to false, and set where neededMichael Forney
2019-04-05expr: Use separate fields for lvalue and decayed instead of flagsMichael Forney