Jesse Rosenstock
1cf9404c19
Support C2X _Static_assert(expr) syntax
...
This makes the message in _Static_assert(expr, message) optional.
Fixes #1188 .
2020-08-16 11:38:20 +02:00
Jesse Rosenstock
c4698dfd07
Use C89 semantics for integer conversions
...
Previously, the following rules were used for binary operators:
* If one of the values is a long, the result is long.
* If one of the values is unsigned, the result is also unsigned.
* Otherwise the result is an int.
C89 specifies the "usual arithmetic conversions" as:
* The integral promotions are performed on both operands.
* Then the following rules are applied:
* If either operand has type unsigned long int, the other operand is
converted to unsigned long int.
* Otherwise, if one operand has type long int and the other has type
unsigned int, if a long int can represent all values of an unsigned int,
the operand of type unsigned int is converted to long int; if a long int
cannot represent all the values of an unsigned int, both operands are
converted to unsigned long int.
* Otherwise, if either operand has type long int, the other operand is
converted to long int.
* Otherwise, if either operand has type unsigned int, the other operand is
converted to unsigned int.
* Otherwise, both operands have type int.
https://port70.net/~nsz/c/c89/c89-draft.html#3.2.1.5
As one example, these rules give a different result for an operator
with one long operand and one unsigned int operand. Previously,
the result type was unsigned long. With C89 semantics, it is just long,
since long can represent all unsigned ints.
Integral promotions convert types shorter than int to int (or unsigned int).
Both char and unsigned char are promoted to int since int can represent
all unsigned chars.
https://port70.net/~nsz/c/c89/c89-draft.html#3.2.1.1
Rename promoteint to ArithmeticConvert, since this is more accurate.
Fixes #170
2020-08-15 19:14:31 +02:00
mrdudz
8197e3c7cd
make it actually compile again :)
2020-08-14 21:07:39 +02:00
mrdudz
f0e4053a0d
added test related to issue #1178
2020-08-14 19:58:58 +02:00
acqn
1d28e8e3de
Improved test case for Issue #191 .
2020-08-14 18:33:54 +02:00
acqn
b19bb14348
Fixed checking conflitcing declarations with external vs other linkage.
2020-08-14 18:33:54 +02:00
acqn
13ed557b92
Fixed compatibility checking of function declarations by using the composite types of them.
2020-08-14 18:33:54 +02:00
acqn
44d52935da
Utility for getting the composite types of functions.
2020-08-14 18:33:54 +02:00
acqn
8a417ff039
Improved ESU declaration failure handling.
2020-08-14 18:15:31 +02:00
mrdudz
dc83eb15af
added test related to issue #1181
2020-08-14 16:12:17 +02:00
Bob Andrews
83452ae6b3
Merge pull request #1182 from acqn/StructPtrField
...
[cc65] Fixed testing 'struct->field'
2020-08-14 14:13:39 +02:00
acqn
0dfe9ff5fe
Fixed testing 'struct->field'.
2020-08-14 08:32:22 +08:00
acqn
0fa18886c0
Fixed copying structs/unions > 4 bytes.
2020-08-13 08:59:05 +02:00
acqn
03b37cf712
Fixed type comparisons of typedefs and arrays.
2020-08-12 15:04:26 +02:00
acqn
eb4464e828
Fixed type comparisons of ESU types with stricter rules.
2020-08-12 15:04:26 +02:00
acqn
8b8561161c
Moved #1098 bug tests from test/misc to test/err as they are fixed now.
2020-08-12 15:02:43 +02:00
acqn
fe44fe963f
Disallowed empty enums.
2020-08-12 15:02:43 +02:00
acqn
97065faf1a
Disallowed struct/union types of 0 size as cc65 is not ready to support them.
2020-08-12 15:02:43 +02:00
acqn
4dfc1a5ded
Using a dedicated SC_FICTITIOUS flag in case of parsing errors.
2020-08-12 15:01:31 +02:00
acqn
bde5be6793
Improved error message on initializing extern variables inside functions.
2020-08-12 15:01:31 +02:00
acqn
b62b1650f5
Improved error messages on struct/union type multiple definitions.
2020-08-12 15:01:31 +02:00
acqn
fe3f726fd6
Improved incomplete enum typed diagnostics.
2020-08-12 15:01:31 +02:00
acqn
0d53806490
Avoided excess errors in incomplete struct assignment.
2020-08-12 15:01:31 +02:00
acqn
9317db6642
Slightly improved type error messages of 'op='.
2020-08-12 15:01:31 +02:00
acqn
9fcfa3fc49
Fixed full type names of functions with "empty" parameter list.
2020-08-12 15:01:31 +02:00
acqn
68d63b089d
Reduced error flood raised by misplaced variable declarations.
2020-08-12 15:01:31 +02:00
acqn
0f1a5e0520
Set enum tag definition flags.
2020-08-09 22:12:36 +02:00
acqn
1dd899c7c9
Fixed non-file-scope multiple definition checking.
2020-08-09 22:12:36 +02:00
acqn
d68cd90e47
Function declaration in functions cannot have storage classes other than 'extern'.
2020-08-07 10:16:33 +02:00
acqn
43efc256f1
Changed error/warning messages not using the term 'tentative' according to PR reviews.
2020-08-07 10:16:33 +02:00
acqn
b2d3b8379c
Warning about forward declaration of enum types in non-cc65 modes.
2020-08-07 10:16:33 +02:00
acqn
8cdffc1944
No storage for unsuccessfully parsed variables.
2020-08-07 10:16:33 +02:00
acqn
fdef067629
Fixed tentative definition of variables of incomplete types that may be completed later.
...
Tenative arrays that never get completed are now assumed each to have one element.
2020-08-07 10:16:33 +02:00
acqn
fdd120db49
Enabled to output errors and warnings about tentative definitions.
2020-08-07 10:16:33 +02:00
acqn
f59d6b8f6a
Redefining enums/structs/unions of 0 size is no longer treated as declarations and thus forbidden.
2020-08-07 10:16:33 +02:00
Jesse Rosenstock
cdfc1afd89
Fix vacuous comparison warning from 0df45fe
...
cc65/symentry.c:306:60: warning: address of array 'Sym->Name' will always evaluate to 'true' [-Wpointer-bool-conversion]
sprintf (TypeName, "%s %s", GetBasicTypeName (T), Sym->Name ? Sym->Name : "<unknown>");
~~~~~^~~~ ~
2020-08-05 17:48:13 +02:00
Jesse Rosenstock
d8f9201ecd
LoadExpr: Optimize <= 8-bit bit-field loads
...
Set CF_FORCECHAR to do as many operations as char ops as possible.
Clear high byte at the end.
2020-08-05 12:49:46 +02:00
Jesse Rosenstock
0c72647edd
Remove extra ED_TestDone call
...
Accidentally added in #1141 .
2020-08-03 12:40:58 +02:00
acqn
bae431eab0
Fixed error message of CheckedPSizeOf().
2020-08-03 06:18:28 +02:00
acqn
e3d913b81a
Fixed the reference output of test/misc/goto.c (test/misc/goto.ref).
2020-08-02 23:51:11 +02:00
acqn
d6aa446b54
Error info for loading expressions of incomplete enum types.
...
No more "Illegal type 0016".
2020-08-02 23:51:11 +02:00
acqn
6df4f1996b
Improved diagnostics with more detailed type names.
2020-08-02 23:51:11 +02:00
acqn
11a5f0edf1
No "Statement has no effect" warnings on statements with errors.
2020-08-02 23:51:11 +02:00
acqn
7e68a24625
Clearer warning messages on unused symbols.
2020-08-02 23:51:11 +02:00
acqn
e8c2886455
Improved error messages on redefinitions of constants and bit-fields.
2020-08-02 23:51:11 +02:00
acqn
ef5a4db12e
Improved warning messages on UB shifts.
2020-08-02 23:51:11 +02:00
acqn
2ab7272673
Improved warning on comparison of unsigned type < 0.
2020-08-02 23:51:11 +02:00
acqn
99ac1c46da
Made errors/warnings statistic message visible when there are errors.
2020-08-02 23:51:11 +02:00
acqn
44e3080ea9
Increased upper limit of allowed errors before aborting.
2020-08-02 23:51:11 +02:00
acqn
00c16d34a4
Minor fixes for HandleSymRedefinition().
2020-08-02 23:51:11 +02:00