Fix tricky typedef'ed identifier bug.

The following code is completely valid in C.

  typedef int x;
  int x = 3;

We rejected such code because the declaration looks as if
it has two type names (int and the user-defined type).
Add usual conv to unary minus.

This change fixes an assertion error when performing unary minus on
char or short.
Add a file comment.
.gitignore: remove obsolete entries and sort the lines.
Cleanup.
Stray character is a valid pp-token.

There is a list of pp-tokens in C11 6.4. The last entry of the list
is "each non-white-space character that cannot be one of the above".
That means any character can be a valid pp-token at the lexer level.

We rejected such stray characters at the lexer.

The difference is not significant because a stray character will
cause the compiler to fail, but that's visible if you run only the
preprocessor using -E.

(It is interesting to find that preprocessing output of GCC 4.8.2
is wrong for the following code.

a \\
 b

GCC expands this to

a \
 b

8cc and Clang correctly expands that to

a \ b

No one would really care about this because the output is not valid
C code though.)
String concatenation shouldn't be done at the preprocessing phase.

The preprocessor is phase 4, and the string concatenation is phase 6.
(See C11 5.1.1.2 about the translation phases.)
8cc concatenated strings in the preprocessor, and that difference
was observable if you pass -E option.
Fix a null dereference.

Fixed a null pointer deference if a call argument is a keyword.
Fix static void pointers which point to label addresses.

Segfaults occured if a static pointer was assigned to
an &&label value, this was because the OP_LABEL_ADDR case
hadn't been handled in gen.c. A test case was added.
Allow global variable declarations to default to int.
Initial commit for the new backend.
Compile a dumb simple program. No register allocation yet.

It's now able to compile

  int main() { int x = 2; return x + 5; }
Implement very simple register allocator.

It reserves stack space for all intermediate results.
It always spills an intermediate result when we run out of registers
even if the result will never be needed again. (In order to elminate
such stores, we need liveness analysis.)

Currently it assumes all variables are of type int.