expr: Fix qualifiers of base type during implicit array conversion
expr: Implement type-checking for casts and assignments
expr: fix erroneous comparison

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.
expr: Use integer type for member access intermediate address calculation
Remove use of C11 noreturn
Update qbe submodule
init: Allow empty initializers
pp: Ignore pragmas

The standard says we should ignore any pragmas that we don't
Add test for typeof on expression with array type
Allow unnamed parameters in function definitions
LICENSE: Put test data in public domain
LICENSE: Update copyright year
qbe: Only return 0 from main if it has type int

Though C11 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, specifies that the implicit return 0 should only
apply when main's return type is compatible with int.
Add -Wno-maybe-uninitialized to prevent false-positive warnings
Update qbe submodule
Remove one last use of _Noreturn
qbe: Switch to new unsigned-float conversion operators
qbe: Use new unary negation operator
qbe: Switch to unary negation

This fixes bugs involving floating point negative zero.