Antoine Griezmann's double sent hosts France through to the final of Euro 2016 with a 2-0 win over world champions Germany in Marseille.
The opening goal came in first-half stoppage-time through Griezmann's controversial penalty after Germany captain Bastian Schweinsteiger was punished for handling as he attempted to block Patrice Evra's header.
Joachim Low's men had the better of the match up until the spot-kick decision, but they posed less of a threat after the break - failing to register a shot on target until injury time as France defended stoutly.
And Griezmann sealed the victory in the closing stages after mistakes from Joshua Kimmich and Manuel Neuer presented him with a simple finish.
Germany had beaten France en route to their World Cup success two years ago, but they will not secure a famous double as their 20-year wait for a continental crown goes on, with Portugal now awaiting Les Bleus in Sunday's final at Stade de France.
After winning their first major semi-final appearance since the 2006 World Cup, Didier Deschamps' side will be favourites as they look to seal glory having won their two previous finals in the tournament.
France - playing with an unchanged team for the first time in their Euros history - came close early on when Griezmann weaved through the Germany defence and forced Neuer into an important low save.
Germany responded swiftly, with Hugo Lloris at full stretch to keep out a threatening deflected effort from Emre Can, who was one of three changes for the world champions as they re-shuffled their pack due to the absences of Mario Gomez, Mats Hummels and Sami Khedira.
Low's men were the more threatening side as the first half progressed and Toni Kroos went down right on the edge of the box under pressure from Paul Pogba and Samuel Umtiti, but referee Nicola Rizzoli was unmoved as the Real Madrid midfielder claimed for a penalty.
Germany were dominating possession, but the match took a dramatic twist seconds before the half-time whistle when Rizzoli controversially did point to the spot at the other end.
In the match that he became outright holder of the European record for appearances at major tournaments, Schweinsteiger denied Evra the chance to head at goal with his arm from close-range after Griezmann's corner.
Griezmann was the taker and he showed no nerves to send Neuer the wrong way despite having missed a penalty in the Champions League final under six weeks ago.
With Hummels suspended, Low suffered a huge blow when his other first-choice centre-back, Jerome Boateng, limped off after an hour.
Germany continued to have most of the ball in the second half, but they had failed to trouble Lloris before Griezmann secured a famous home victory with 18 minutes remaining.
Pogba capitalised on a defensive error from Kimmich and when Neuer could only push his cross into the path of Griezmann, the Atletico Madrid forward stabbed home his sixth goal of the tournament.
Kimmich curled an excellent effort off the far post from the edge of the area, but Germany ultimately failed to trouble Lloris until it was too late.
The Tottenham keeper made a brilliant stoppage-time save from Kimmich's header to preserve his clean sheet as France booked their date against Portugal.