-Werror

There are several reasons not to use -Werror by default:

You might have included third-party code which produces warnings.

If multiple files have to be recompiled, and one throws a warning, make(1) will stop and not even try to compile the rest, never mind link the results.  Thus you will not get to see all warnings (or actual errors, if there are any in the remaining files) in one go.  This is bad news, if compiler history is any indication: most compilers are written so that they keep going if at all possible, so that they can show you all the errors in a file, not just die at the first.

As programmer and intelligent being, you should reserve the right to decide which warning is important and which is not.  If you compare the unsigned size of the array to a signed index, for example, then you will run out of memory (or address space) before the signedness becomes a problem.  There are many similar ways in which the program can be perfectly fine despite the warning, and these should not stop the compiler from creating an executable.  On the other hand, if the warnings point to an actual problem, the compiler should still complete the build, and you will intelligently decide not to run it.