Swiss teenager Belinda Bencic upset world number one Serena Williams to reach the Rogers Cup final in Toronto.
Bencic, 18, fought back to beat the 21-time Grand Slam champion 3-6 7-5 6-4 - only the second defeat for Williams in 45 matches this year.
The American, 33, has won the first three Grand Slams of 2015 and will go for the calendar Grand Slam at the US Open, which begins on 31 August.
"I played like an amateur to be honest," said Williams.
"I felt pretty much in control until I lost the match."
Bencic, the youngest player to beat Williams in a completed match since Maria Sharapova in 2004, said victory was "an incredible feeling".
"I was very overwhelmed from the situation on the court, but I'm just so happy the forehand landed in [on match point]," she said.
Bencic will play Romanian second seed Simona Halep in the Toronto final.
Halep, who is playing her first event since losing in the first round at Wimbledon, beat Italy's Sara Errani 6-4 6-4.
"I'm completely dead now, it was a very tough match," said Halep. "She played amazing, she was running everywhere for all the balls.
"I did everything I could to finish in two sets because in the third one I don't know what would happen."