Bachelor's Thesis

GCC plugin for static analyzer support

Final Thesis 995.59 kB

Author of thesis: Lukáš Pšeja

Acad. year: 2025/2026

Supervisor: Dr. Ing. Petr Peringer

Reviewer: doc. Mgr. Adam Rogalewicz, Ph.D.

Abstract:

This bachelor’s thesis modernizes the Code Listener infrastructure, which serves as an integration layer between compilers and static analyzers for C and C++ programs. It first analyzes the original architecture and identifies its main limitations, namely mandatory transformations and the tight coupling of analysis results with the internal program representation. Based on this analysis, the thesis designs and implements a new GCC plugin built around a compiler-independent CodeModel, lazily evaluated annotation services, a unified analyzer interface, and JSON export for offline processing. The solution preserves backward compatibility with Predator through an adapter that reconstructs the original callback stream from the new CodeModel. Correctness and practical viability were validated by native regression suites and by 1 192 Predator compatibility tests executed after rebuilds with GCC 12, 13, 14, and 15.

Keywords:

static analysis, C/C++, GCC plugin, GIMPLE, Code Listener, Predator, JSON serialization

Date of defence

16.06.2026

Result of the defence

Defended (thesis was successfully defended)

znamkaAznamka

Grading

A

Process of defence

Student nejprve prezentoval výsledky, kterých dosáhl v rámci své práce. Komise se poté seznámila s hodnocením vedoucího a posudkem oponenta práce. Student následně odpověděl na otázky oponenta a na další otázky přítomných. Komise se na základě posudku oponenta, hodnocení vedoucího, přednesené prezentace a odpovědí studenta na položené otázky rozhodla práci hodnotit stupněm A.

Topics for thesis defence

  1. Analyzátor Broom https://pajda.fit.vutbr.cz/rogalew/broom načítá vstup z JSON formátu vytvořeného původním Code-listenerem. Je formát generovaný Vaším nástrojem kompatibilní s původním JSONem generovaným Code-listenerem?

Language of thesis

English

Faculty

Department

Study programme

Information Technology (BIT)

Composition of Committee

doc. Ing. Jan Kořenek, Ph.D. (předseda)
doc. Ing. Ondřej Lengál, Ph.D. (místopředseda)
Ing. Bohuslav Křena, Ph.D. (člen)
Ing. Šárka Květoňová, Ph.D. (člen)
Ing. David Bařina, Ph.D. (člen)

Supervisor’s report
Dr. Ing. Petr Peringer

Student pracoval systematicky a samostatně, práci pravidelně konzultoval a jednoznačně prokázal schopnost analyzovat existující kód CodeListeneru a vytvořit nový podsystém s významným vylepšením nad rámec zadání (např. možnost analyzovat modulární programy). Proto navrhuji výborné hodnocení stupněm A.

Evaluation criteria Verbal classification
Informace k zadání

Cílem této práce bylo  vylepšení struktury a funkčnosti CodeListeneru s využitím moderního C++. Toto zadání považuji za náročnější, protože bylo nutné prostudovat existující implementaci CodeListeneru, rozhraní překladače GCC a návaznosti na verifikační nástroj Predator.  S výsledkem jsem spokojen, nové rozhraní bude použitelné mimo jiné i jako základ pro podobnou inovaci nástroje Predator.

Práce s literaturou

Kromě zadaných zdrojů si student vyhledával relevantní literaturu zcela samostatně.

Aktivita během řešení, konzultace, komunikace

Student byl po celou dobu řešení nadprůměrně aktivní, pravidelně informoval o průběhu práce. Postupoval systematicky a samostatně, pro zvýšení produktivity práce rozumným způsobem využil nástroje typu LLM. Na konzultace byl vždy připraven. Jeho přístup celkově hodnotím velmi kladně.

Aktivita při dokončování

Text práce byl řádně a s předstihem konzultován. Většina mých připomínek byla do textu zapracována.

Publikační činnost, ocenění

-

Points proposed by supervisor: 90

Grade proposed by supervisor: A

Jedná se o povedenou nadprůměrnou práci, která si zaslouží nadprůměrné hodnocení. Proto navrhuji hodnocení na hraně známky A-B. Při pěkné obhajobě doporučuji hodnotit známkou A.

Evaluation criteria Verbal classification Points
Náročnost zadání

Evaluation level: obtížnější zadání

V rámci zadání bylo třeba nastudovat a pochopit netriviální projekt Code-listener a jeho propojeni se statickým analyzátorem Predator.

Prezentační úroveň technické zprávy

Prezentační úroveň je výborná. Práce popisuje vše podstatné a nezabíhá do zbytečných detailů. Může posloužit jako referenční příručka pro další studenty, kteří budou pracovat s Predatorem a Code-listenerem.

Jako drobnou chybu považuji, že v obrázku 3.1 uvádí student komponentu "Core" a v textu popisuje "Code model".

90
Formální úprava technické zprávy

Text je psán v angličtině a je bez problémů čitelný a pochopitelný. V rámci grafické úpravy mám akorát připomínku k několika obrázkům, které jsou větší, než by bylo vhodné (strana 14, 22).

90
Realizační výstup

Realizační výstup je plně funkční a může být využit jako náhrada code-listenera v rámci projektu Predator. V dokumentaci mi akorát chybí postup, jak projekt kompilovat a napojit na gcc, které není v systémových adresářích. V rámci původního Predatora bylo možné použít proměnnou HOST_GCC, která ale teď nefunguje. Bylo by prima, kdyby student doplnil návod o postup při použití nesystémového gcc.

95
Využitelnost výsledků

Implementované řešení může být využito jako plnohodnotná náhrada projektu Code-listener. Nové řešení by mělo mít výrazně méně systémových závislostí, než původní projekt.

Rozsah splnění požadavků zadání

Evaluation level: zadání splněno

Rozsah technické zprávy

Evaluation level: je v obvyklém rozmezí

Práce s literaturou

Bez připomínek.

95
Topics for thesis defence:
  1. Analyzátor Broom https://pajda.fit.vutbr.cz/rogalew/broom načítá vstup z JSON formátu vytvořeného původním Code-listenerem. Je formát generovaný Vaším nástrojem kompatibilní s původním JSONem generovaným Code-listenerem?
Points proposed by reviewer: 90

Responsibility: Mgr. et Mgr. Hana Odstrčilová