Aslan Karatsev claimed his first top-five victim with a 7-5 4-6 6-4 win at the Serbia Open over world number one Novak Djokovic.
The 27-year-old Russian saved 23 of 28 break points against his opponent, whose brother organised the event.
Karatsev and Djokovic pushed one another all the way in a match that took three hours and 26 minutes to conclude.
Tokyo 2020
'Image not the best' - Nadal criticises Djokovic for 'strange' racket smash tantrum
The number three seed will face one of Matteo Berrettini or Taro Daniel in Sunday’s final, who play in the day’s second semi-final.
Djokovic praised Karatsev after what he said was a forgettable evening.
"Hats off to Karatsev, he was bold and deserved to win," Djokovic told an online news conference.
"I will probably not be able to recollect all the memorable rallies in this match because I lost. I am not happy with my performance, I put up a fight but he delivered great shots every time he needed to.
"I was unlucky at times, it all came down to one or two shots but I had too many ups and downs throughout the match."
Karatsev said: "This is definitely the most important victory of my career. At the Australian Open in Melbourne I felt like I was playing against a wall but this is a different surface and I was focused."

'Evans defeat one of the worst I can remember' - Djokovic

ATP Washington, DC
Djokovic can still complete the Grand Slam, says Nadal
Tokyo 2020
'Dominant' - Emotional Zverev claims emphatic singles gold