Arduino leonardo hangs on i2c wire.begin()

This is the code that is executed in a Wire.begin() call:

void twi_init(void)
{
  // initialize state
  twi_state = TWI_READY;
  twi_sendStop = true;		// default value
  twi_inRepStart = false;
  
  // activate internal pullups for twi.
  digitalWrite(SDA, 1);
  digitalWrite(SCL, 1);

  // initialize twi prescaler and bit rate
  cbi(TWSR, TWPS0);
  cbi(TWSR, TWPS1);
  TWBR = ((F_CPU / TWI_FREQ) - 16) / 2;

  /* twi bit rate formula from atmega128 manual pg 204
  SCL Frequency = CPU Clock Frequency / (16 + (2 * TWBR))
  note: TWBR should be 10 or higher for master mode
  It is 72 for a 16mhz Wiring board with 100kHz TWI */

  // enable twi module, acks, and twi interrupt
  TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA);
}

As you can see there is no loop the processor might be staying in endlessly. So I doubt that this call is really freezing even if the hardware is not properly built.

@SurferTim: As you can see the (weak) internal pullup is activated, so external pullups are only necessary for setups with a higher bus capacitance (p.e. longer bus length).

Post your complete code and a wiring diagram.