Team Ineos' Egan Bernal had his lead cut on the penultimate stage of the Tour of Switzerland as Yves Lampaert won the stage eight time trial.
Lampaert, 28, took the stage for his Deceuninck-Quick-Step team, clocking 21 minutes and 58 seconds over 19.2km.
Bernal was 38 seconds behind and saw his 41-second overall lead reduced to 22 seconds by Australian Rohan Dennis.
Bernal, 22, won the Paris-Nice race in March and can win again if he defends his lead in Sunday's 144.4km finale.
His form has seen him emerge as a rival for his Ineos team-mate Geraint Thomas at the Tour de France, which starts on 6 July.
The final stage of the Tour of Switzerland is hilly, and Bernal showed class in the mountains when he took Friday's seventh stage - the longest and most arduous of the Tour.
He said he had expected to come under pressure on Saturday, given that Bahrain-Merida rider Dennis won last year's World Time Trial Championships.
"It's for sure a surprise for me to be here in the yellow jersey," said Bernal. "This morning I thought that maybe I would lose yellow and now I'm still here.
"Tomorrow I think we should just try to keep the jersey, not do anything crazy. There's one day to go. If Bahrain want to win the race they will try something, but we just need to keep hold of it."
Elsewhere on Saturday, Ivan Sosa claimed his first victory in Team Ineos colours in style by winning the queen stage at La Route d'Occitanie.
Sosa beat Movistar rider Alejandro Valverde into second and now sits second in the general classification after three stages, eight seconds behind Spaniard Valverde.
Tour of Switzerland - stage eight result
1. Yves Lampaert (Deceuninck-Quick-Step) 21mins 58secs
2. Kasper Asgreen (Deceuninck-Quick-Step) +5secs
3. Soren Kragh Andersen (Team Sunweb) +10secs
4. Tom Scully (EF Education First) +13secs
5. Patrick Bevin (CCC Team) Same time
1. Egan Bernal (Team Ineos) 24hrs 40mins 24secs
2. Rohan Dennis (Bahrain Merida) +22secs
3. Patrick Konrad (Bora-Hansgrohe) +1min 46secs
4. Domenico Pozzovivo (Bahrain Merida) +1min 54secs
5. Jan Hirt (Astana) +1min 55secs