Frankrike kom till kvällens möte med Portugal med fyra poäng i ryggen, medan Portugal stod på tre.
En knapp halvtimme in i matchen fick Portugal straff efter att Hugo Lloris gått brutalt in mot Danilo, en situation där portugisen fick en riktigt hård smäll. Danilo blev liggande en stund men kunde sedan fortsätta matchen. Cristino Ronaldo klev fram och gjorde inget misstag från elva meter när han satte 1-0.
Strax innan paus fick Frankrike en straff efter att Kylian Mbappé gått omkull i straffområdet. Fram klev Karim Benzema, som gör comeback i landslaget, och satte bollen i mål till 1-1, hans första mål någonsin i ett EM-slutspel.
I upptakten av den andra halvleken tog Frankrike ledningen. Karim Benzema hittade igenom i djupled och satte bollen i mål via stolpen - ett mål som godkändes efter VAR-granskning.
En timme in i matchen fick Portugal straff igen efter att bollen tagit på en fransk försvarares arm. Cristiano Ronaldo tog även denna straff och satte bollen i mål till 2-2 - hans femte mål i detta EM och hans 109:e totalt för Portugal. Därmed tangerar han Ali Daeis (Iran) rekordnotering för flest mål någonsin för ett landslag.
Paul Pogba var ytterst nära att ge Frankrike ledningen i den 67:e minuten, men Rui Patricio stod för en svettig enhandsräddning på Man United-mittfältarens långskott.
Ronaldos 2-2-mål blev matchens sista, och matchen slutade oavgjort.
Resultatet gör att Frankrike vinner gruppen på fem inspelade poäng. Efter ett sent kvitteringsmål av Tyskland mot Ungern i München slutar Portugal som grupptrea, då Tyskland tar andraplatsen före Portugal på inbördes möten.
- Jag tvivlade aldrig på mig själv, men jag visste att det fanns förväntningar på mig hemifrån. Jag lyckades göra ett mål och jag kommer att njuta av det med alla andra, säger Karim Benzema till TF1 enligt BBC efter matchen.
I åttondelsfinal ställs Frankrike mot Schweiz, en match som spelas i Bukarest, Rumänien, på måndag. Portugal i sin tur möter Belgien i Sevilla på söndag.
Startelvor:
Portugal: Patricio - Semedo, Pepe, Dias, Guerreiro, Ronaldo, Joao Moutinho, Silva, Danilo, Sanches, Jota
Frankrike: Lloris, Koundé, Varane, Kimpembe, Hernandez - Pogba, Kanté - Tolisso, Griezmann, Mbappé - Benzema