Careers > GNATcoverage: Implement LLVM coverage instrumentation for Ada
Last modified 9/25/2025 6:59:29 AM

GNATcoverage: Implement LLVM coverage instrumentation for Ada

Internship
AdaCore
Paris, France

AdaCore: Helping Developers Build Software that Matters

Everything we do at AdaCore is centered around helping developers build safe, secure and reliable software.

For 30 years, we've partnered with global leaders in aerospace & defense, air traffic management, space, railway and financial services. We've developed tools and services simplifying high-integrity software development through a subscription-based model. As demand for secure applications grows in industries like automotive, medical, energy, and IoT, we're adapting our proven technologies to assist a new generation of developers.

Our 150 global experts based in the US, France, Germany, the UK, and Estonia, collectively develop cutting-edge technologies to address the challenges of high-grade software development.

Joining AdaCore is about joining a culture of innovation, openness, collaboration and dependability, which defines how we work together, with our customers and partners.

Context

Developed at AdaCore, the GNAT Dynamic Anaysis Suite (https://www.adacore.com/dynamic-analysis) includes GNATcoverage, a coverage analysis tool for Ada, C/C++ and Rust. GNATcoverage supports Ada and C/C++ through source coverage instrumentation: it modifies the source code to monitor the execution of the program. The support of Rust is implemented in rustc, using the LLVM coverage instrumentation approach: instead of instrumenting the original source code, the compiler frontend provides coverage mapping information to the LLVM backend, which selectively instruments the LLVM-IR code.

The goal of this internship is to implement a similar solution for Ada, which would be implemented in the GNAT LLVM compiler (the LLVM front-end for Ada). It would consist of adding coverage analysis information, as done in the clang and rustc compiler for C/C++ and Rust respectively. Candidates for this position should have a strong interest in coverage analysis and compilers. A good working knowledge of Ada and LLVM is beneficial.

Phases

The internship's overall goal is to incrementally add support for the coverage levels supported by GNATcoverage: statement, decision, and MCDC (modified condition decision coverage) which can be mapped to the following LLVM coverage levels: block and MCDC. The internship would be split in the following phases:

  • Phase 1: Investigate the support for LLVM coverage in other compilers

    • Get familiar with the LLVM code coverage format by delving into the clang implementation for C/C++ and / or the rustc implementation for Rust which are feature-full.

    • Get a basic understanding of how coverage works: the coverage levels and their variations across tools (e.g. statement coverage versus block coverage, or line coverage, MCDC coverage).

    • Get familiar with GNATcoverage and its various uses (to analyze a GNATcoverage trace, to produce a Rust coverage report).

  • Phase 2: Implement a block coverage proof of concept

    • Implement support for block coverage in the GNAT LLVM compiler, using the LLVM coverage mapping format.

    • Integrate it into GNATcoverage, and validate the solution using the GNATcoverage qualification testsuite for statement coverage.

  • Phase 3: Implement branch and MCDC coverage

    • Implement support for branch and MCDC coverage in the GNAT LLVM compiler.

  • Phase 4: Verify correct integration within GNATcoverage / add support for this coverage backend in GNATfuzz’s libfuzzer integration.

Skills required/nice to have:

  • Experience/interest in compilation / LLVM

  • Good programming skills in Ada

References:

Timeframe & Location:

During 2026 - 6 months - Paris office 

Beyond the job

We're a global organization driven by diverse backgrounds, fostering innovation through an open exchange of ideas. We welcome applicants of all backgrounds, celebrating diversity in ethnicity, nationality, gender, age, religion, abilities, sexual orientation, veteran or marital status. 

Our commitment is to help our teammates, wherever they are based, feel comfortable and satisfied, by encouraging flexibility to ensure them a healthy work-life balance. Additionally, we prioritize individual development by offering continuous training from day one with a personalized onboarding plan.

 

Powered by Hello Talent