I tried just now to investigate the overflow condition. Again, I could not reproduce the problem.
I used the same hardware as above. The Teensy 3.6 sends 12 bytes when the orange wire pulses low.
Code:
void setup() {
Serial1.begin(9600);
pinMode(2, INPUT_PULLUP);
}
void loop() {
if (digitalRead(2) == LOW) {
for (int i=1; i <= 12; i++) {
Serial1.write(i + 32);
}
delay(10);
while (digitalRead(2) == LOW) /* wait */ ;
delay(30);
}
}
The Teensy 3.2 turns off interrupts and gives a 15 ms pulse (rather than my hand touching the wire to GND), which is long enough for all 12 bytes to transmit. Interrupts remain disabled for the entire 15 ms. Here is are the waveforms on my scope.

It's easy to see on the scope that all 12 bytes really are transmitting.
Here is the code running on the Teensy 3.2. After the 15 ms pulse, it turns interrupts back on and attempts to read whatever data arrived.
Code:
unsigned int loopcount=0;
void setup() {
Serial1.begin(9600);
pinMode(12, OUTPUT);
digitalWrite(12, HIGH);
}
void loop() {
unsigned int count=0;
noInterrupts();
digitalWriteFast(12, LOW);
delayMicroseconds(15000);
digitalWriteFast(12, HIGH);
interrupts();
while (Serial1.available()) {
int n = Serial1.read();
Serial.printf("Received %u, ", n);
Serial.printf("byte count=%u, ", ++count);
Serial.printf("loop count=%u\n", loopcount);
}
loopcount++;
delay(1000);
}
As you can see in this screenshot, it's not locking up.

As expected, only the first 8 bytes are received because Serial1 has a 8-deep FIFO. The other 4 bytes are lost, which should be pretty good confirmation of the overflow condition. But no lockup is happening. In fact, while I've been writing this message, it's continued running, now with loopcount up to 778 and still running without any lockups.