At the end of a pulsating contest in Saudi Arabia, Real Madrid scraped through 3-2 after extra-time and will now face either Atletico Madrid or Athletic Bilbao, who play on Thursday, in Sunday's final.
Real Madrid struck a fifth Clasico victory in a row on Wednesday to advance to the Spanish Super Cup final but Barcelona's young guns showed why there is belief the club's recovery has begun.
At the end of a pulsating contest in Saudi Arabia, Madrid scraped through 3-2 after extra-time and will now face either Atletico Madrid or Athletic Bilbao, who play on Thursday, in Sunday's final.
As expected, Madrid triumphed to make it a quintet of consecutive Clasico victories, the first time either side has enjoyed such dominance since Pep Guardiola's Barcelona won 5-0 at Camp Nou in 2010.
That Vinicius Junior and Karim Benzema, Madrid's deadly attacking duo, both scored again was not a shock either, nor even that the brilliant Ansu Fati came off the bench to head home in his first appearance in two months.
The surprise was that a youthful Barcelona side, that sits 17 points behind Real Madrid in La Liga, pushed Madrid all the way at the King Fahd Stadium and for 10 minutes after Fati's late equaliser looked the more likely to reach the final.
Xavi Hernandez said this game would be an "exam" for his team and while they lost the game, it would be harsh not to conclude they passed.
By the end, Barcelona's 11 included Pedri, 19, Ez Abde, 20, Fati, 19, Nico Gonzalez, 20, and Ronald Araujo, 22. Gavi, 17, and Ferran Torres, 21, had gone off.
Madrid's own young gem, Vinicius, might prove to be the best of the lot, the Br azilian almost unstoppable again.
Luuk de Jong, though, equalised for Barcelona and after Fati cancelled out Benzema's strike, it needed Fede Valverde to score the winner in extra-time.
Barcelona were almost unrecognisable from the start, boosted by the return of several key players. Fati, Pedri, Frenkie de Jong and Araujo were all back after injury.
Torres also made his debut, 15 days after completing his move from Manchester City. He tested negative for Covid and was finally registered by La Liga, Barca making space in their budget by extending the contract of Samuel Umtiti.
Real Madrid were the better side early on, slicker through midfield and more meaningful in attack.
Yet when the goal came, it was via an error from Sergio Busquets, the veteran robbed of the ball in the centre circle. Benzema caught him napping, received it back from Luka Modric and sent the ball into the path of Vinicius.
With three perfect touches, he controlled, pushed away from Ronald Araujo and lifted the ball into the net.
There was little to forecast Barcelona's equaliser, which arrived four minutes before half-time. Ousmane Dembele's cross to the near post was met by Eder Militao but his clearance cannoned off the outstretched foot of De Jong, the ball rebounding in off the post.
Pedri and Abde came on at half-time and Barca quickened the pace, Pedri firing wide shortly after the restart. Fati came on for De Jong, the team suddenly looking more menacing.
But it was Benzema who went closest, teed up by Vinicius. He skilfully made just enough space in the penalty area to crack a left-footed shot against the post.
Madrid were gaining again now and in the 72nd minute, they struck. Ferland Mendy skipped past Alves and cut back for Benzema, whose effort was pushed left by Marc-Andre ter Stegen.
Dani Carvajal was there to drive the ball back in and while Ter Stegen again made the block, this time it fell to Benzema, who adjusted and finished.
With seven minutes left, Madrid were closing in but Fati intervened. Memphis Depay played the corner short and Jordi Alba's cross found a space in the box, where Fati jumped, stretched and headed into the corner.
For the remaining minutes, it was Barcelona on top, Dembele racing through and Pedri denied by Nacho Fernandez. They started better in extra-time too but perhaps over-exerted because suddenly Madrid were five against three.
Vinicius ran over Rodrygo's pull-back and Valverde, with Benzema and Casemiro next to him, rolled in.