The front end boils down the GCC/MSVC compatible flags into front end
agnostic -stack-protector <N> for cc1. -stack-protector 0 and not
specifying the flag at all were previously handled in the same way.
This made it difficult to differentiate between code compiled explicitly
with -fno-stack-protector vs being the level of stack protection
unspecified.
This patch adds a new enum value for the stack protector being
unspecified, and changes -stack-protector 0 to always mean "we do not
want a stack protector." -stack-protector <N> is not passed to cc1 if
the front end does not specify a stack protection level.
Where some overrides used to return SSPOff to mean "don't
care/unspecified," (which in other contexts additionally meant "no stack
protector, please") they now intentionally return the new enum value
meaning just "don't care/unspecified."
This permits a follow up change to have -fno-stack-protector//GS_
mean "no stack protectors" as opposed to "don't care."
I don't know if it's a convention, but an unspecified enum is typically put at the beginning of the enum list.