Nineteen-year-old Bianca Andreescu will face Williams in the final of the Rogers Cup.
The unseeded home favourite beat American Sofia Kenin in two sets, 6-4 7-6.
She's spent much of the past year out with a shoulder injury but gained attention with her Indian Wells triumph in March.

Arsenal must improve defensively despite win over Wolves, says Arteta
Dubai Capitals secures thrilling nine-run victory over Abu Dhabi Knight Riders
Dominant pitching leads Mid East to series saving win over Mumbai
Police detain organiser of Messi visit after Indian fans rip up seats
