France's constitutional court on Friday approved President Emmanuel Macron's plan to raise the retirement age to 64 from 62, but unions vowed to oppose the controversial reforms as fresh protests erupted nationwide.
The ruling paves the way for Macron to sign into law the unpopular changes that have sparked months of protests and strikes.
Unions warned they were calling for new mass protests on the May 1 labour day, and sometimes violent demonstrations erupted in several cities after the verdict was announced.
The nine-member Constitutional Council ruled in favour of key provisions of the reform, including raising the retirement age to 64 and extending the years of work required for a full pension, saying the legislation was in accordance with French law.
Six minor proposals were rejected, including forcing large companies to publish how many over-55s they employ, and the creation of a special contract for older workers.
The decision represents a victory for Macron but analysts say it has come at major personal cost for the 45-year-old.
The president's approval ratings are near their lowest levels and many voters have been outraged by his decision to ram the pensions law through parliament without a vote.
"It's scandalous. Where's the democracy?" said Bea, a 61-year-old librarian, one of thousands who gathered outside Paris city hall.
"Stay the course. That's my motto," Macron said Friday as he inspected Notre-Dame Cathedral in Paris, four years after a devastating fire nearly destroyed the gothic monument.
Bikes, e-scooters and garbage were set on fire in the capital as riot police stopped protesters from advancing further, AFP correspondents said.
Protests rallying hundreds erupted in other cities including Marseille and Toulouse, while in Lyon where police used tear gas to disperse demonstrators.
In the western city of Rennes, protesters set fire to the entrance of a police station and a conference centre.
Paris police said 112 people had been arrested as of 10.30pm (2030 GMT).
The offices of the Constitutional Council, near the Louvre museum, have been protected with barriers and riot police were on guard nearby.
Prime Minister Elisabeth Borne said the court had "judged the reform, on the substance as well as procedure, to conform with the constitution".
"This evening, there are no winners or losers," she tweeted.
It remains to be seen if the months-long effort by trade unions to block the changes will continue.
Some 380,000 people had taken to the streets nationwide on Thursday in the latest day of union-led action, according to the interior ministry – a small fraction of the nearly 1.3 million who demonstrated at the height of the protests in March.
Unions issued a joint statement urging Macron not to sign the legislation into law, saying the issue was "not finished".
The general secretary of the CGT union, Sophie Binet, called for a "popular and historic tidal wave" of people on the streets to oppose the reforms on May 1.
Communist Party leader Fabien Roussel said signing the law "would not be pouring oil on the fire, but a jerrycan full of petrol".
"I fear an outpouring of anger," he told BFM television.
Last month, a strike by Paris garbage workers left the capital strewn with 10,000 tonnes of uncollected rubbish.
Train services, oil refineries and schools have seen stoppages since January.
In a second decision on Friday, the court rejected a bid from opposition lawmakers to force a referendum on an alternative pension law that would have kept the retirement age at 62.
France lags behind most of its European neighbours, many of which have hiked the retirement age to 65 or above.
Opponents of the changes say they penalises women and unskilled workers who started their careers early, and undercut the right to a long retirement.
Senior ruling party MP Eric Woerth said Friday that he hoped the country would end up acknowledging the need for the change as move people live longer.
But he admitted: "We have not convinced people."
Polls consistently show that two out of three French people are against working a further two years.
Macron has called the change "necessary" to avoid annual pension deficits forecast to hit €13.5 billion (RM65.98 billion) by 2030, according to government figures.