Vi inför likvärdiga modulo indata (EMI), en enkel, allmänt tillämplig metod för att validera optimera kompilatorer. Vår nyckelinsikt är att utnyttja det nära samspelet mellan (1) dynamiskt utföra ett program på vissa testingångar och (2) statiskt sammanställa programmet för att arbeta på alla möjliga ingångar. Testingångarna inducerar faktiskt en naturlig samling av originalprogrammets EMI-varianter, som kan hjälpa till att differentiera testa varje kompilator och specifikt rikta de svåra att hitta felkompileringar. För att skapa ett praktiskt genomförande av EMI för att validera C-kompilatorer, profilerar vi ett programs testutföranden och stochastiskt beskära dess oexekverade kod. Vår omfattande testning på elva månader har lett till 147 bekräftade, unika felrapporter för enbart GCC och LLVM. Majoriteten av dessa fel är felkompileringar, och mer än 100 har redan rättats. Förutom att testa kompilatorer kan EMI anpassas för att validera programomvandlings- och analyssystem i allmänhet. Detta arbete öppnar upp denna spännande, nya riktning.
Detta tillvägagångssätt låter en forskargrupp hitta 147 bekräftade, unika felrapporter för GCC och LLVM ensam genom profilering program test exekveringar och beskärning dess oexekverade kod REF.
Compiler validation via equivalence modulo inputs
{'venue': "PLDI '14", 'journal': None, 'mag_field_of_study': ['Computer Science']}