Chirp does not generate complex outputs, so the results of chirp are only correct when both frequencies are positive (or when both frequencies are negative) in which case you get a correct symmetric spectrum.
A combination of a positive and negative frequencies does not yield a linear or quadratic chirp, instead it generates two chirp segments (not what chirp function promises).
See the figure created with the example code below. Notice that a combination of positive and negative frequencies does not yield a chirp. It generates a symmetric signal consisting of a chirp that goes from -250 to 0 and then another chirp that goes from 0 to -100 Hz. Also notice that specifying 2 negative frequencies is equivalent to specifying 2 positive frequencies. This is the reason why we limited F1 to be positive. Having said that, I noticed that we are actually not checking for F0 to be positive so we need to fix this as well.
The best solution is to allow both frequencies to be either positive, or both frequencies to be negative (although allowing negative frequencies is not really necessary, it will prevent code like the one you wrote from breaking). We will never allow mixed signs to prevent an incorrect answer which was our intent when we updated the code.
For now, notice that in your code:
y = chirp(repmat(t,1,4), -400, t(end), -100);
is equivalent to
y = chirp(repmat(t,1,4), 400, t(end), 100);
t = 0:1/1000:10;
y = chirp(t,-250,10,-100);
title('Two negative frequencies -> chirp(t,-250,10,-100)')
y = chirp(t,250,10,100);
title('Two positive frequencies -> chirp(t,250,10,100)')
y = chirp(t,-250,10,100);
title('One positive frequency and one negative frequency- -> chirp(t,-250,10,100)')