I am reviewing and editing some working I2C code from January, 2016. In my notes, I wrote that a write collision per se does not set an interrupt flag. That is, it can only be detected by testing the SSPxCON1 register. Unfortunately, I neglected to reference my comment. Elsewhere, I see "hints" that it is one of the events that can set the SSPxIF.

If it sets that flag, then one wouldn't need to test SSPxCON1, WCOL (as I currently do) and could rely on the interrupt flag.
I have been using the code for 3 months to communicate periodically with the EEPROM on a DS3231 RTC module and have yet to see any failures. My set-up is a single master (16F1829) and single slave (DS3231) at 100 kHz with LED's that are set with any BCL, WCOL, or ACK failure. Language is Assembly.
Regards, John

If it sets that flag, then one wouldn't need to test SSPxCON1, WCOL (as I currently do) and could rely on the interrupt flag.
I have been using the code for 3 months to communicate periodically with the EEPROM on a DS3231 RTC module and have yet to see any failures. My set-up is a single master (16F1829) and single slave (DS3231) at 100 kHz with LED's that are set with any BCL, WCOL, or ACK failure. Language is Assembly.
Regards, John