Treat .a files as expected
Pull out GNU warnings and add -Wgnu
Add warning for GNU empty initialiser
Disable call-through-lvalue - safely call through reg for now

Although massively UB, this code demonstrated that:
a) the register offset (%rbp - 6) wasn't applied for the stack-entry call,
b) calling a value in memory should be lea'd into a reg, not call *-6(%rbp)

main()
{
	/* mov 3 eax, ret */
	unsigned char code[] = {
		0xb8,
		0x03,
		0x00,
		0x00,
		0x00,
		0xc3,
	};
	return ((int (*)())code)();
}