Unseeded youngster Stefanos Tsitsipas saved a match point before beating Kevin Anderson to set up a final against Rafael Nadal at the Rogers Cup.
The Greek, who turns 20 on the day of Sunday's final in Toronto, overcame the South African 6-7 (4-7) 6-4 7-6 (9-7).
The world number 27 also beat Dominic Thiem, Novak Djokovic and Alexander Zverev in previous rounds.
In the women's final, Romanian world number one Simona Halep will play American Sloane Stephens in Montreal.
Halep beat Australian Ashleigh Barty 6-4 6-1, while Stephens was a 6-3 6-3 winner against Ukraine's Elina Svitolina.