Karim Benzema scored an extra-time penalty as Real Madrid pulled off another astonishing comeback in the Champions League to stun Manchester City 3-1 on Wednesday and book a showdown with Liverpool in the final.
City looked certain to go through when Riyad Mahrez put them 1-0 up and 5-3 ahead on aggregate but Rodrygo, on as a substitute, scored an incredible late double, his goals in the 90th and 91st minutes sending the tie to extra time.
With City still reeling, Real Madrid landed the knock-out blow as Benzema earned and then converted a spot-kick to snatch a 6-5 win on aggregate, with another remarkable fightback at the Santiago Bernabeu added to the club's long list of magical European nights.
"It's the greatness of this club," said Real coach Carlo Ancelotti. "It's a club that doesn't allow you to give up even if it seems everything is over. It gives you the strength to keep going, to fight, to believe."
Madrid had already performed the unlikeliest of rescue acts to defeat both Paris Saint-Germain in the last 16 and Chelsea in the quarter-finals.
Like PSG and Chelsea before them, City will wonder how they emerged as losers from a match they largely controlled and there will be fresh scrutiny on coach Pep Guardiola, who, for all his success, goes another year without leading City to the European glory they so crave.
City's collapse would have been almost inexplicable had it been against anyone other than Real Madrid, who advance to their 17th final in the competition. They are a victory against Liverpool away from lifting a 14th European Cup.
"Another magic night from the kings of Europe," read a banner draped over the stand at one end before kick-off but for most of normal time, this match failed to live up to the seven-goal thriller at the Etihad Stadium last week.
Real Madrid were the more assertive early on, with Benzema given a couple of difficult opportunities that he put off target.
In between, Luka Modric and Rodri clashed over a Casemiro challenge and then City stepped forward, squeezing Madrid into errors as Kevin De Bruyne hit Thibaut Courtois from distance before the goalkeeper had to make a smart reaction save from Bernardo Silva.
Real Madrid survived and then improved before the break, Modric causing a roar of satisfaction when he outsprinted De Bruyne to cut off a counter.
Probably their best chance came within seconds of the restart as Dani Carvajal found space down the right but Vinicius Junior shot wide at the back post.
An injury to City right-back Kyle Walker checked Madrid's momentum and when the game found its rhythm again, the visitors struck, Ilkay Gundogan's pass cutting through Madrid's midfield and finding Silva, who danced through to the edge of the box.
Silva shaped to shoot but instead wedged the ball right to Mahrez, who smashed it hard, early and past Courtois.
Jack Grealish, on as a substitute, could have made it two for City but somehow Ferland Mendy cleared off the line, before another Grealish shot flashed past the post.
It felt inconsequential because Madrid looked dead and buried but somehow, out of nowhere, they found a way back.
It was the 90th minute when Benzema cushioned a ball brilliantly across for Rodrygo to feather in at the near post and the cheer for the goal was only a little louder than for the stadium announcer then saying there would be six minutes of added time.
Madrid only needed one as Carvajal swung a cross into the box, where the diminutive Rodrygo headed in.
When play resumed, Madrid emerged the stronger and four minutes in, they had a penalty, Benzema tumbling over the tired, lunging leg of Ruben Dias before ignoring City's attempts at distraction by rolling the spot-kick into the corner.
City pushed as Fernandinho came up just short at the back post when Courtois parried away. A late flick from Dias into the box floated harmlessly into the hands of Courtois, City's final attempt coming to nothing.