setSeverity can take invalid source location. Fixes asserts.

The underlying issue is the setSeverity method compares if the given
source location was before or after a push diagnostic mappings (pragma push).
The problem is that we 'give' a wannabe source location, because the
memory buffer (which will expand it to a real source location) is not
parsed yet. Thus the pseudo-valid source location looks like a location
came from a pch, which causes a misbehavior in the logic of comparer.