Stade Rennes reached the French Cup final as Ramy Bensebaini's late strike secured a 3-2 win at Olympique Lyonnais on Tuesday.
Rennes twice led with goals by Mbaye Niang and Benjamin Andre but Lyon fought back through Bertrand Traore and Moussa Dembele before defender Bensebaini sent the visitors through.
Rennes will meet either Paris St Germain or Nantes in the final at the Stade de France on April 27.
Lyon president Jean-Michel Aulas, who was expected to extend coach Bruno Genesio's contract by two years, said he would wait until the end of the season to make his decision.
"I would have offered him a two-year contract extension if we had reached the final and finished in the top three in Ligue 1," Aulas told a news conference.
Lyon are third in the standings, seven points ahead of fourth-placed St Etienne with eight games left.
"We are not ruling out a contract extension later in the season," Aulas added.
Rennes took the lead in the semi-final when Niang latched onto a cross from Ismaila Sarr five minutes before the interval.
Traore equalised two minutes into the second half after being set up in the box by Tanguy Ndombele, but Rennes regained the advantage eight minutes later as Andre headed home from Hatem Ben Arfa's corner.
Andre's handball in the 75th minute, however, gave Lyon a penalty that Dembele coolly converted.
Rennes continued to push and Bensebaini beat Anthony Lopes in the 81st minute, firing home from Benjamin Bourigeaud's fluffed attempt to clinch a place in the final.