Bachelor's Thesis

GCC plugin for static analyzer support

Final Thesis 995.59 kB

Author of thesis: Bc. 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
Information about assignment

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.

Work with literature

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

Activity during solution, consultations, communication

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ě.

Activity during completion

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

Publication activity, awards

-

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
The difficulty of the assignment

Evaluation level: more difficult assignment

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.

Presentation level of the technical report

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
Formal preparation of a technical report

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
Realisation output

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
Usability of results

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.

The extent to which the requirements of the assignment have been met

Evaluation level: assignment fulfilled

Extent of the technical report

Evaluation level: is within the usual extent

Work with literature

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á