Leonardo bootloader broken when code is uploaded

I am toying with direct ISR and port manipulation because I need faster interrupt response. The code below breaks my leonardo but works on an uno. When I upload the code windows stops recognizing the leonardo with the error "Device Descriptor failed". If I push reset and reload a stock example code it will start working again. So I know its the bootloader. Any ideas?

ISR (INT2_vect) //pin 0
{
  Serial.println("Test");
}  

void setup ()
{
  Serial.begin(115200);
 DDRD = DDRD | B00000000;
 EICRA &= ~(bit(ISC00) | bit (ISC01));  // clear existing flags
 EICRA |= bit (ISC01);    // set wanted flags (falling level interrupt)
 EIMSK |= bit (INT2);     // enable it  
}  // end of setup

void loop () { }

I wonder if calling Serial.println in the interrupt service routine might be causing problems.

Well, it's not exactly a bootloader. The USB code on the Leonardo doesn't run on a separate processor like the UNO. It's all on the one processor with your code.

If your code locks up in a bad way, then the USB also stops working.

I have tried it without the serial.println, that did not help.

I narrowed down to using INT2(pin 0). Is there more to using that interrupt since its the RX pin?

EICRA |= bit (ISC01);    // set wanted flags (falling level interrupt)

ISC00 and ISC01 are used to configured External Interrupt 0 not 2.

 DDRD = DDRD | B00000000;

Bitwise-or with zero has no side-effects.

I am unsure what you mean by that.

If the right-side of the bitwise-or is zero then the result of the bitwise-or is...