Defending champions Spain beat Portugal 4-2 on penalties after their Euro 2012 semi-final finished 0-0 after extra-time on Wednesday.
Cesc Fabregas put away the decisive penalty in a shootout which saw Portugal's captain Cristiano Ronaldo end up not taking one as he was their fifth penalty taker.
The Spanish should have taken the lead in the first-half of extra-time but Andres Iniesta's point blank shot - set up by a great run by Jordi Alba - was brilliantly saved by Rui Patricio
Both sides had a couple of clear chances in each half of normal time, with Ronaldo missing a great opportunity in the 90th minute, firing high over the bar when one on one with the goalkeeper.
Germany play Italy in the other semi-final on Thursday in Warsaw.