AC Milan beat Lazio on penalties to set up a Coppa Italia final with holders Juventus.
After two goalless legs and extra time, the game went to spot-kicks with Lazio defender Luis Felipe putting the crucial kick over the bar.
Earlier, Juventus beat Atalanta 1-0 to wrap up a 2-0 aggregate victory and reach the final for a fourth consecutive season.
Miralem Pjanic scored a penalty after Gianluca Mancini fouled Blaise Matuidi.
Juve had a major scare at 0-0 when Atalanta’s Alejandro Gomez lobbed Gianluigi Buffon – who was outside his box – from 40 yards with the ball hitting the bar.
The final will be played on Wednesday, 9 May in Rome’s Olympic Stadium.