US President Donald Trump has vetoed a $740bn (£549bn) defence spending bill that passed Congress this month.
Mr Trump is objecting to provisions that limit troop withdrawals from Afghanistan and Europe and remove Confederate leaders’ names from military bases.
He also wanted it to repeal a liability shield for social media companies.
Lawmakers passed the measure with an overwhelming majority and could override the president’s rejection.
Bills passed by Congress need a president’s signature to become law. On rare occasions, a president may choose to veto, or reject, legislation because of some policy disagreement.
Lawmakers can override a presidential veto by mustering two-thirds of votes in both chambers of Congress, allowing the bill to become law anyway.
If Congress does not override Mr Trump’s veto in this case it would be the first time in 60 years that the National Defense Authorization Act (NDAA) does not become law.
Mr Trump called the 4,500-page act, which has been nearly a year in the making, a “gift to China and Russia”.
“Unfortunately, the Act fails to include critical national security measures, includes provisions that fail to respect our veterans and our military’s history, and contradicts efforts by my Administration to put America first in our national security and foreign policy actions,” he said in a statement.
The president also said the bill’s measures to limit bringing troops home was “not only is this bad policy, but it is unconstitutional”.
Ahead of Wednesday’s veto, some of the outgoing president’s advisers had cautioned him against rejecting the bill, as he is expected to be overruled by Congress.
Mr Trump has previously vetoed eight bills, which were all upheld with support from his fellow Republicans in Congress.
He is due to leave office on 20 January, when he will be replaced by Democrat Joe Biden.
The defence bill sets the Pentagon’s policy. It also determines decisions affecting weapons, personnel, troop deployments and other security measures. A number of military initiatives will stall if the bill does not become law.
This year’s measure also contains a 3% pay raise for active duty troops.
Republican Senate Leader Mitch McConnell was one of many among the president’s party who championed the bill even as Mr Trump threatened to reject it.
Though Mr McConnell has been a staunch ally to the president during his tenure, the veteran lawmaker said the annual measure must pass.
He and Democratic Senate leader Chuck Schumer have already agreed to set up an override vote for next week, a day after the House of Representatives holds its vote.
“Donald Trump just vetoed a pay raise for our troops so he can defend dead Confederate traitors,” Mr Schumer tweeted. “Democrats will vote to override it.”
Mr Trump has repeatedly rejected calls to rename bases with ties to leaders of the Confederacy – the group of slaveholding southern states that seceded from the Union, sparking the US Civil War.